Nginx 使用证书进行双向校验

生成root CA证书时COMMON_NAME参数不能与生成server端和client端证书时的COMMON_NAME参数一样,其他参数随意、

签发服务证书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
cat << EOF > nginx-csr.json
{
"CN": "Nginx",
"hosts": [
"127.0.0.1",
"localhost",
"139.224.75.128",
"10.10.10.11"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "ZJ",
"ST": "HZ",
"O": "yonge server",
"OU": "IT"
}
]
}
EOF

cfssl gencert \
-ca=ca.pem \
-ca-key=ca-key.pem \
-config=ca-config.json \
-profile=www nginx-csr.json | cfssljson -bare nginx

签发客户端证书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
cat << EOF > client-csr.json
{
"CN": "Client",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"O": "My client"
}
]
}
EOF

cfssl gencert \
-ca=ca.pem \
-ca-key=ca-key.pem \
-config=ca-config.json \
-profile=www client-csr.json | cfssljson -bare client

nginx 配置

1
2
3
4
5
6
7
8
server {
listen 443 ssl http2;
server_name www.example.com;
ssl_certificate nginx.crt; # 服务端证书
ssl_certificate_key nginx.key; # 服务端证书
ssl_client_certificate client-ca.crt; # 客户端证书的CA
ssl_verify_client on;
}

客户端证书转p12

查看更多: 普通x509证书转p12格式

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

使用curl 命令测试

使用 curl 命令无需把证书转换成p12格式

1
2
# 这里一定要使用证书相对路径或绝对路径,不能写成 --cert client.crt ....这种形式,但是--cacert是可以直接写的
curl curl --cacert ca.crt --cert ./client.crt --key ./client.key https://10.10.10.11

浏览器导入p12证书

浏览器导入p12证书

附:

  • 经个人通过nginx验证,使用双向认证时,证书到期会导致认证不通过
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2018-2024 Outsrkem
  • 访问人数: | 浏览次数:

      请我喝杯咖啡吧~

      支付宝
      微信