说明
nginx 证书双向认证是认证客户端证书
是否是配置的根证书
颁发的.
创建根证书
#创建根证书私钥:
openssl genrsa -out ca.key 1024
#创建根证书请求文件:
openssl req -new -out ca.csr -key ca.key
#创建根证书:
openssl x509 -req -in ca.csr -out ca.crt -signkey ca.key -CAcreateserial -days 3650
- ca.crt : 签名有效期为10年的根证书
- ca.key: 根证书私钥文件
- ca.csr: 根证书请求文件
根据根证书创建服务端证书
#生成服务器端证书私钥:
openssl genrsa -out server.key 1024
#生成服务器证书请求文件,过程和注意事项参考根证书,本节不详述:
openssl req -new -out server.csr -key server.key
#生成服务器端公钥证书
openssl x509 -req -in server.csr -out server.crt -signkey server.key -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650
根据根证书创建客户端证书
#生成客户端证书秘钥:
openssl genrsa -out client.key 1024
#生成客户端证书请求文件,过程和注意事项参考根证书,本节不详述:
openssl req -new -out client.csr -key client.key
#生客户端证书
openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650
#生客户端p12格式证书,需要输入一个密码,比如123456
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
client.p12:客户端 p12 格式,这个证书文件包含客户端的公钥和私钥,主要用来给浏览器或 postman 访问使用.
nginx配置
server {
listen 443 ssl;
server_name www.yourdomain.com;# 无域名可填写ip
ssl on;
ssl_certificate /data/sslKey/server.crt; #server公钥证书
ssl_certificate_key /data/sslKey/server.key; #server私钥
ssl_client_certificate /data/sslKey/ca.crt; #根证书,可以验证所有它颁发的客户端证书
ssl_verify_client on; #开启客户端证书验证
ssl_verify_depth 1; #如果客户端证书不是由根证书直接颁发,需要开启此参数
location / {
proxy_pass http://127.0.0.1:8080/;
}
#location / {
# root html;
# index index.html index.htm;
# }
}
访问测试
- curl 带证书访问
curl --cert ./client.crt --key ./client.key https://foo.bar.com
- postman
- 设置
General
中先把SSL certificate verification
关掉. Certificates
中选择Add Certificates
,PFX file
配置客户端p12
文件和密码
.