设置TLS相互身份验证

设置TLS相互身份验证

申请根证书

创建私钥

openssl genrsa -aes256 -out ca/ca.key 4096 chmod 400 ca/ca.key

创建有效期2年的根证书

可以使用SHA256哈希算法创建有效期为两年的根CA证书(不再使用SHA1)

openssl req -new -x509 -sha256 -days 730 -key ca/ca.key -out ca/ca.crt

除了Common Name 输入颁发者名称(自定义颁发者),其他都留空

chmod 444 ca/ca.crt

验证根证书

openssl x509 -noout -text -in ca/ca.crt

创建服务器证书

为服务器创建一个私钥

openssl genrsa -out server/client-test.com.key 2048

此处2048位密钥就足够了,因为该密钥仅有效一年,而4096位将减慢TLS握手。同时也省略了-aes256选项,因为我们不想在每次启动Web服务器时都输入密码

chmod 400 server/client-test.com.key

为特定的域名创建证书请求

openssl req -new -key server/client-test.com.key -sha256 -out server/client-test.com.csr

为每个CSR详细信息输入一个点,但是“通用名称”必须是服务器的标准域名

使用根CA签署CSR一年

openssl x509 -req -days 365 -sha256 -in server/client-test.com.csr -CA ca/ca.crt -CAkey ca/ca.key -set_serial 1 -out server/client-test.com.crt

系统将提示您输入根CA的密码。

验证证书

openssl x509 -noout -text -in server/client-test.com.crt

还可以验证信任链

openssl verify -CAfile ca/ca.crt server/client-test.com.crt

显示:server/client-test.com.crt: OK

创建客户端证书

为客户端zhangsan创建一个私钥

openssl genrsa -out client/zhangsan.key 2048

为客户端创建CSR

(如果用户创建了客户端的CSR,则服务器将看不到用户的私钥)

openssl req -new -key client/zhangsan.key -out client/zhangsan.csr

为每个CSR详细信息输入一个点,但是“通用名称”必须是服务器的标准域名

使用根ca签署CSR

openssl x509 -req -days 365 -sha256 -in client/zhangsan.csr -CA ca/ca.crt -CAkey ca/ca.key -set_serial 2 -out client/zhangsan.crt

Nginx配置

server {

listen 443 ssl;

...

ssl_certificate /etc/nginx/certs/server/client-test.com.crt;

ssl_certificate_key /etc/nginx/certs/server/client-test.com.key;

ssl_client_certificate /etc/nginx/certs/ca/ca.crt;

ssl_verify_client on;

...

}

安装客户端证书

需要一个PKCS#12文件

openssl pkcs12 -export -clcerts -in client/zhangsan.crt -inkey client/zhangsan.key -out client/zhangsan.p12

浏览器安装证书

本地安装CA证书

导入PKCS#12文件

You May Also Like

About the Author: daidai5771

发表评论

电子邮件地址不会被公开。 必填项已用*标注