由于最近项目中需要用到安全证书,所以这里记录下如何使用openssl生成安全证书,操作环境:Ubuntu16.04,
操作过程
一. 生成证书
- 生成一个2048位的私匙文件 — rsa_private_key.pem
openssl genrsa -out rsa_private_key.pem 2048
- 从私匙里提取公匙文件 — rsa_public_key.pem
openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -outform PEM -pubout
- 使用私匙创建公匙证书请求,会让你填写一些内容,可根据需要填写,
openssl req -new -key rsa_private_key.pem -out rsa_cert_req.csr
- 生成证书(crt)并签名(有效期10年),注意这个不是v3证书,后面会讲如何生成v3证书
openssl x509 -req -days 3650 -in rsa_cert_req.csr -signkey rsa_private_key.pem -out rsa_cert.crt
- 查看crt证书,会显示在第3步中填写的内容,
其中,C:Country(国家);ST:State(省);L:Locality(市);O:Organization Name(组织);OU:Organizational Unit(部门);CN:Common Name(域名)openssl x509 -in rsa_cert.crt -noout -text
上述操作生成的证书是crt,私匙和公匙文件格式是pem,有时我们需要的是der格式的证书和钥匙,那么就需要进行转换,转换如下,
- 把私匙转换成der格式
openssl rsa -in rsa_private_key.pem -out rsa_private_key.der -outform der
- 把公匙转换成der格式
openssl rsa -in rsa_public_key.pem -out rsa_public_key.der -pubin -outform der
- 把crt证书转换成der格式
openssl x509 -in rsa_cert.crt -out rsa_cert.der -outform der
- 查看der格式的证书
openssl x509 -in rsa_cert.der -inform der -noout -text
这样就证书和钥匙文件就生成完毕了。
二 生成v3证书
如果需要生成v3证书,那么就需要先生成私匙和公匙证书请求,即前面生成的rsa_private_key.pem和rsa_cert_req.csr。
然后在ubuntu里查找openssl.cnf文件,命令如下,
sudo find /* -name "openssl.cnf"
一般是在/ect/ssl/openssl.cnf,也可能是/usr/local/ssl/openssl.cnf,或者别的地方。把这个文件拷贝出来,然后打开,在文本最后添加以下内容,注意,实际使用时要根据自己的需要进行添加和修改,
[hello_cert]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=@alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = Linux-Ubuntu16.04
IP.1 = 127.0.0.1
IP.2 = 0.0.0.0
URI = xxxx
也可以不使用openssl.cnf,直接自己写个文件,包含上面要添加的内容,也可以运行成功,这里使用openssl.cnf只是做个范例,因为这个文件里其它内容可以作为参考。
最后执行下面的命令来生成v3证书,
openssl x509 -req -days 3650 -sha256 -extfile openssl.cnf -extensions hello_cert -in rsa_cert_req.csr -signkey rsa_private_key.pem -out server.crt
PS: -extfile后面的openssl.cnf就是之前我们拷贝过来并修改的opensll.cnf文件,-extensions后面的hello_crt表示从openssl.cnf里提取hello_crt的内容。
生成的是crt证书,如需生成der格式可以参考上一节来转换。下面查看下这个cert证书,来看下我们添加进去的内容,
openssl x509 -in server.crt -noout -text
可以看到有如下内容,
这部分就是刚才在openssl.cnf里填写的内容。
小结
本文主要讲述如何使用openssl生成自签名证书,参考了网上很多其它文章,自己也多次实践并验证通过。
如果有写的不对的地方,希望能留言指正,谢谢阅读。