利用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: critical
                CA: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浏览器访问

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值