欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Nginx+SSL实现双向认证的示例代码

程序员文章站 2022-06-27 19:14:46
首先创建一个目录 cd /etc/nginx mkdir ssl cd ssl ca与自签名 制作ca私钥 openssl ge...

首先创建一个目录

cd /etc/nginx
mkdir ssl
cd ssl

ca与自签名

制作ca私钥

openssl genrsa -out ca.key 2048

制作 ca 根证书(公钥)

openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

注意:

1、common name 可以随意填写
2、其他需要填写的信息为了避免有误,都填写 . 吧

服务器端证书

制作服务器端私钥:

openssl genrsa -out server.pem 1024
openssl rsa -in server.pem -out server.key

生成签发请求:

openssl req -new -key server.pem -out server.csr

注意:

1、common name 得填写为访问服务时的域名,这里我们用 usb.dev 下面 nginx 配置会用到
2、其他需要填写的信息为了避免有误,都填写 . 吧(为了和 ca 根证书匹配)

用ca签发

openssl x509 -req -sha256 -in server.csr -ca ca.crt -cakey ca.key -cacreateserial -days 3650 -out server.crt

客户端证书

与服务端证书类似

注意:

1、common name可以随意填写
2、其他需要填写的信息为了避免有误,都填写 . 吧(为了和 ca 根证书匹配)

至此需要的证书都弄好了,我们可以开始配置 nginx 了。

nginx配置

server {
    listen 443;
    server_name usb.dev;

    index index.html;

    root /data/test/;

    ssl on;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    ssl_client_certificate /etc/nginx/ssl/ca.crt;
    ssl_verify_client on;
}

请求验证

验证过程可以选择在其他机器或是本机,为了能够解析 usb.dev,还需要配置一下 /etc/hosts:

ip地址 usb.dev

如果用浏览器验证,需要把客户端证书导出成 p12 格式的

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

从服务器上将几个证书下载下来,然后安装到可信的证书列表,点击刚才生成的p12文件输入证书的密码将安装至个人列表。
然后关闭浏览器,重新输入域名,会出现ssl双向验证的证书提示。选择证书即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。