本文主要是介绍利用OpenSSL 自签CA证书制作链式SSL证书,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文描述的是利用自签CA制作链式证书的步骤,主要是制作中间证书的关键步骤。
目前CA证书基本均为链式证书,其主要目的是利用中间证书的特性,既可以保护根证书的密钥安全性,又可以方便进行吊销操作。
0x00 制作根证书密钥(root.key):
openssl genrsa -aes256 -out root.key 4096
参数含义:
genrsa: 生成RSA密钥
4096: 指定密钥长度
命令执行后会要求输入密码,切记此密码为root.key专有。eg.若没有aes256选项则可以免密码。
0x01 制作根证书|自签CA(root.crt):
此步骤有两种方式 一种是按部就班的生成证书申请文件csr,利用csr继续生成crt格式证书;另一种方式直接生成crt,省去csr。
生成csr方式:
openssl req -new -key root.key -out root.csr
输入完成后需要输入0x00中的密码 和xxxx信息:
Enter pass phrase for root.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Shanghai
Locality Name (eg, city) [Default City]:Shanghai
Organization Name (eg, company) [Default Company Ltd]:LDW
Organizational Unit Name (eg, section) []:LDW STD
Common Name (eg, your name or your server's hostname) []:LDW self sign CA
重点:Common Name此项目输入的是本证书的标志,除此之外的C L O OU项目一定要记得自己输入的什么,另外C L O OU CN大小写敏感。
之后就会得到证书申请文件(root.csr)。之后利用csr获得根证书(root.crt):
openssl x509 -req -days 3650 -sha256 -extfile root.ext -extensions v3_ca -in root.csr -signkey root.key -out root.crt
参数含义:
days: 证书有效期
in: 上一步生成的csr文件 -signkey/-key 0x00生成的密钥 out:生成证书
关键参数:
0.1.1 -extfile root.ext 此参数指定了含有 0.1.2配置的配置文件位置
0.1.2 -extensions v3_ca 此参数指定了一个在extfile配置文件里的[v3-ca]配置:
[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = critical,CA:true
此参数可省略,如果要制作链式证书我劝你最好加上。
直接生成root.crt方式:
openssl req -new -x509 -days 3650 -sha256 -extensions v3_ca -key root.key -out root.crt -subj "/C=CN/L=Shanghai/O=LDW/OU=LDW STD/CN=LDW sign CA"
0x02 制作中间证书:
首先生成中间证书密钥(middle.key)
openssl genrsa -out middle.key 4096
关键步骤:
生成一个如下内容ext文件
[ v3_intermediate_ca ]
# Extensions for a typical intermediate CA (`man x509v3_config`).
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
命名为ca_intermediate.ext
之后生成中间证书请求文件(middle.csr)
openssl req -new -key middle.key -out middle.csr -subj "/C=CN/L=Shanghai/O=LDW/OU=LDW STD/CN=LDW middle CA"
利用middle.csr和ca_intermediate.ext生成中间证书:
openssl x509 -req -extfile ca_intermediate.ext -extensions v3_intermediate_ca -days 1800 -sha256 -CA root.crt -CAkey root.key -CAcreateserial -CAserial serial -in middle.csr -out middle.crt
之后可以使用openssl verify命令验证:
openssl verify -CAfile root.crt middle.crt
正确应该输出:
middle.crt: OK
此时证明我们的中间证书已经可以链到我们的根证书上了,之后需要验证middle.crt的一个关键配置项:
openssl x509 -noout -text -in middle.crt
在输出的文本中找到这一句:
X509v3 Basic Constraints: criticalCA:TRUE, pathlen:0
没有的,请从生成中间证书开始重做,此项必须为TRUE
此时中间证书才是生成完毕。
0x03 利用中间证书生成服务端证书
先生成服务端证书密钥(server.key):
openssl genrsa -out server.key 2048
生成请求文件(server.csr):
openssl req -new -key server.key -out server.csr -subj "/C=CN/L=Shanghai/O=LDW/OU=LDW STD/CN=*.useye.cn"
为了适应现代浏览器SSL证书标准还需生成一个ext文件:
[ v3_server ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names[alt_names]
DNS.1 = *.useye.cn
DNS.2 = *.52sexy.net
命名为server.ext。其中DNS.X后面跟的域名为你自己想要生成的域名。
利用中间证书生成服务端证书(server.crt):
openssl x509 -req -extfile server.ext -extensions v3_server -days 365 -sha256 -CA middle.crt -CAkey middle.key -CAserial serial -in server.csr -out server.crt
之后我们需要做一个验证,首先需要生成一个根证书与中间证书的一个复合证书:
cat middle.crt root.crt > middle-chain.crt
之后用复合证书验证服务端证书:
openssl verify -CAfile middle-chain.crt server.crt
只有如下输出才是正确的:
server.crt: OK
此时我们的链式证书最终生成完成。
PS:
将root.crt导入windows可信根证书区域,middle.crt导入可信中间证书区域,即可验证server.crt有效性:
Chrome浏览器访问
这篇关于利用OpenSSL 自签CA证书制作链式SSL证书的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!