最近公司项目需要配置双向认证,使用的是阿里云Linux服务器以及nginx,对应的ssl证书也使用的是阿里云的免费证书。特此记录配置流程。
CA与自签名
# 制作CA私钥
openssl genrsa -out ca.key 2048
# 制作CA公钥/根证书
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
# Common Name 随意填写;不能与客户端或服务端相同
服务器端证书(使用阿里云免费ssl可忽略此步骤)
# 制作服务器私钥
openssl genrsa -out server.pem 1024
openssl rsa -in server.pem -out server.key
# 生成签发请求
openssl req -new -key server.pem -out server.csr
# Common Name填写访问服务器时域名,配置nginx时用到,不能与CA的相同其它填写”.”
# 用CA签发证书
openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt
客户端证书
# 制作私钥
openssl genrsa -out client.pem 1024
openssl rsa -in client.pem -out client.key
# 生成签发请求
openssl req -new -key client.pem -out client.csr
# Common Name填写访问服务器时域名,配置nginx时用到,不能与CA的相同 其它填写”.”
# 用CA签发
openssl x509 -req -sha256 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out client.crt
# 验证签名
openssl verify -CAfile ca.crt client.crt
# 使用浏览器访问时,需要生成p12格式的客户端证书
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
服务器Nginx配置
# 配置https双向认证的主要配置
listen 443 ssl;
server_name hostName;
server_tokens off;
ssl on;
ssl_certificate server.crt; # server证书公钥 或阿里云证书pem
ssl_certificate_key server.key; # server私钥 或阿里云证书key
ssl_client_certificate ca.crt; # 根级证书公钥,用于验证各个二级client
ssl_verify_client on; # 开启客户端证书验证
# 配置好后重新加载nginx
service nginx reload