使用openssl生成自签名证书
发布日期:2021-05-04 02:14:12 浏览次数:30 分类:技术文章

本文共 2199 字,大约阅读时间需要 7 分钟。

由于最近项目中需要用到安全证书,所以这里记录下如何使用openssl生成安全证书,操作环境:Ubuntu16.04,

操作过程

一. 生成证书
  1. 生成一个2048位的私匙文件 — rsa_private_key.pem
    openssl genrsa -out rsa_private_key.pem 2048
  2. 从私匙里提取公匙文件 — rsa_public_key.pem
    openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -outform PEM -pubout
  3. 使用私匙创建公匙证书请求,会让你填写一些内容,可根据需要填写,
    openssl req -new -key rsa_private_key.pem -out rsa_cert_req.csr
  4. 生成证书(crt)并签名(有效期10年),注意这个不是v3证书,后面会讲如何生成v3证书
    openssl x509 -req -days 3650 -in rsa_cert_req.csr -signkey rsa_private_key.pem -out rsa_cert.crt
  5. 查看crt证书,会显示在第3步中填写的内容,
    openssl x509 -in rsa_cert.crt -noout -text
    其中,C:Country(国家);ST:State(省);L:Locality(市);O:Organization Name(组织);OU:Organizational Unit(部门);CN:Common Name(域名)

上述操作生成的证书是crt,私匙和公匙文件格式是pem,有时我们需要的是der格式的证书和钥匙,那么就需要进行转换,转换如下,

  1. 把私匙转换成der格式
    openssl rsa -in rsa_private_key.pem -out rsa_private_key.der -outform der
  2. 把公匙转换成der格式
    openssl rsa -in rsa_public_key.pem -out rsa_public_key.der -pubin -outform der
  3. 把crt证书转换成der格式
    openssl x509 -in rsa_cert.crt -out rsa_cert.der -outform der
  4. 查看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=hashauthorityKeyIdentifier=keyid,issuerbasicConstraints=CA:FALSEkeyUsage = nonRepudiation, digitalSignature, keyEnciphermentsubjectAltName=@alt_names[alt_names]DNS.1 = localhostDNS.2 = Linux-Ubuntu16.04IP.1 = 127.0.0.1IP.2 = 0.0.0.0URI = 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生成自签名证书,参考了网上很多其它文章,自己也多次实践并验证通过。

如果有写的不对的地方,希望能留言指正,谢谢阅读。

上一篇:学习open62541 --- [5] Server连接变量和物理过程
下一篇:wxPython中TextCtrl的输入上限问题

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年04月07日 09时22分44秒