【实验目的及要求】
实验目的:
学会签发根CA证书,使用根CA证书签发下级证书。
实验要求:
利用OpenSSL提供的命令行工具实现:
- 生成根CA密钥对、生成自签名的根CA证书;
- 生成普通个人用户的密钥对,并生成证书请求;
- 以CA管理员的角色,给上一步生成的证书请求签发个人证书。
【实验环境】
Linux 内核2.6及以上,安装有OpenSSL。
【实验过程】
1)环境准备
1、首先检查系统是否安装openssl,命令行中输入命令
openssl version
如图在命令行中,输出了OpenSSL的版本信息:
(若无版本信息请自行百度安装OpenSSL教程)
2、接着,我们需要准备一个目录放置CA文件,包括颁发的证书和CRL(Certificate Revoke List)。这里我们新建目录 /var/MyCA,然后我们在/var/MyCA下建立两个目录,certs用来保存我们的CA颁发的所有的证书的副本;private用来保存CA证书的私钥匙,同时将private目录权限设置为700(仅自己可读写)。
3、除了生成钥匙,在我们的CA体系中还需要创建三个文件。第一个文件用来跟踪最后一次颁发的证书的序列号,我们把它命名为serial,初始化为01。第二个文件是一个排序数据库,用来跟踪已经颁发的证书。我们把它命名为index.txt,文件内容为空。
第三个文件是OpenSSL的配置文件:
键入命令
gedit openssl.cnf
然后在文件中输入下列内容:
[ ca ]
default_ca = myca
[ myca ]
dir = /var/MyCA
certificate = $dir/cacert.pem
database = $dir/index.txt
new_certs_dir = $dir/certs
private_key = $dir/private/cakey.pem
serial = $dir/serial
default_crl_days= 7
default_days = 365
default_md = md5
policy = myca_policy
x509_extensions = certificate_extensions
[ myca_policy ]
commonName = supplied
stateOrProvinceName = supplied
countryName = supplied
emailAddress = supplied
organizationName= supplied
organizationalUnitName = optional
[ certificate_extensions ]
basicConstraints= CA:false
我们需要告诉OpenSSL配置文件的路径,有两种方法可以达成目的:通过config命令选项;通过环境变量OPENSSL_CONF。这里利用config选项。(后面会用到)
2)生成根证书 (Root Certificate)
我们需要一个证书来为自己颁发的证书签名,这个证书可从其他CA获取,或者是自签名的根证书。这里我们生成一个自签名的根证书。首先我们需要往配置文件里面添加一些信息,如下所示,节名和命令行工具的命令req一样。我们把所有必要的信息都写进配置。
[ req ]
default_bits = 2048
default_keyfile = /var/MyCA/private/cakey.pem
default_md = md5
prompt = no
distinguished_name = root_ca_distinguished_name
x509_extensions = root_ca_extensions
[ root_ca_distinguished_name ]
commonName = My Test CA
stateOrProvinceName = HZ
countryName = CN
emailAddress = test@cert.com
organizationName = Root Certification Authority
[ root_ca_extensions ]
basicConstraints = CA:true
3) 生成根的密钥对和根证书
命令:
openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf
4)生成普通个人用户的密钥对,并生成证书请求
首先生成普通个人用户的密钥对(key文件):
命令:
openssl genrsa -des3 -out client.key 1024
接着生成普通个人用户的证书请求:
命令:
openssl req -new -key client.key -out client.csr
后面按照提示输入各种信息即可.
5)以CA管理员的角色给普通用户请求签发个人证书
命令:
openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
用OpenSSL命令行,来验证一下我们生成的证书:
命令:
openssl verify -CApath certs -CAfile ca.crt client.crt
到此实验完成。