问题背景:在实际的C-S访问中,有需要多个客户端双向认证的情况。
解决办法1:使用同一根证书
多个用户使用同一个CA证书(root.crt)和私钥(root.key)进行签名,并在nginx进行如下配置
具体配置流程可以仿照解决办法2
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/root.crt; #根证书,可以验证所有它颁发的客户端证书
ssl_verify_client on; #开启客户端证书验证
# 反向代理eg: 作用是通过https(443端口)访问, 则会直接去请求本机的8991端口
location / {
proxy_pass http://127.0.0.1:8991/;
}
#location / {
# root html;
# index index.html index.htm;
# }
}
解决办法2:使用证书链
0.证书查看命令
openssl x509 -in server.crt -noout -text
1.创建CA私钥和证书(注意:这里的配置项中除Common Name外必须与server一致,CommonName与server端、client端必须不一致)
openssl req -x509 -newkey rsa:2048 -nodes -keyout ca.key -out ca.crt -days 3650
2.创建client私钥和client证书请求文件(注意:这里的配置项中除Common Name外必须与server一致)
openssl req -newkey rsa:2048 -nodes -keyout client.key -out client.csr
3.用client证书请求文件,在CA中申请证书(即上面生成的CA私钥和证书)
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 3650
4.配置nginx
1)将新生成的CA证书信息导入到之前的CA证书中
2)? 配置nginx(nginx配置和方式1没有区别)
cat ca.crt >> /data/sslKey/ca.crt
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; #开启客户端证书验证
# 反向代理eg: 作用是通过https(443端口)访问, 则会直接去请求本机的8991端口
location / {
proxy_pass http://127.0.0.1:8991/;
}
#location / {
# root html;
# index index.html index.htm;
# }
}
|