nginx实现双向认证

1. 创建根证书

#创建根证书私钥:
openssl genrsa -out root.key 1024

#创建根证书请求文件:
openssl req -new -out root.csr -key root.key
#创建根证书:
openssl x509 -req -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 3650
  • 证书的Common Name可填写为 root . 所有客户端和服务器端的证书这个字段需要填写域名或者ip,一定要注意的是,根证书的这个字段和客户端证书、服务器端证书不能一样
  • 其他所有字段的填写,根证书、服务器端证书、客户端证书需保持一致
  • 无用项可以选择直接回车跳过

最终得到:

  • root.crt : 签名有效期为10年的根证书
  • root.key: 根证书私钥文件
  • root.csr: 根证书请求文件

后面我们可以用这个根证书去颁发服务器证书和客户端证书

2. 根据根证书创建服务端证书

#生成服务器端证书私钥:
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 root.crt -CAkey root.key -CAcreateserial -days 3650

通过上面的三个命令,我们得到:

server.key:服务器端的秘钥文件
server.crt:有效期十年的服务器端公钥证书,使用根证书和服务器端私钥文件一起生成
root.srl: CA签发证书的序列号记录文件,全名是 root.Serial 。
server.csr : 服务端证书请求文件(请求证书时使用, 后续配置无用)

3. 根据根证书创建客户端证书

需要注意的是, 可以生成多个客户端证书, 只需安装下面1-4步重新生成即可

#生成客户端证书秘钥:
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 root.crt -CAkey root.key -CAcreateserial -days 3650

#生客户端p12格式证书,需要输入一个密码,选一个好记的,比如123456
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

重复使用上面的三个命令,我们得到:

client.key:客户端的私钥文件
client.crt:有效期十年的客户端证书,使用根证书和客户端私钥一起生成
client.p12:客户端p12格式,这个证书文件包含客户端的公钥和私钥,主要用来给浏览器或postman访问使用
clinet.csr : 客户端证书请求文件(请求证书时使用, 后续配置无用)
 

4. 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/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;
        # }
    }

注意:

配置的主要内容是配置了服务器端证书的公钥私钥以及根证书的公钥, 并且ssl_verify_client 参数设置为 on

如果客户端证书不是由根证书直接颁发的,配置中还需要加一个配置:ssl_verify_depth 1;

配置完成后,通过nginx -s reload 令配置文件重新加载, 无需重启

如果手里面只有通过正规途径申请下来的证书(而不是上面自签证做法), 得到的证书如下面所示, 这里只有服务端证书而没有服务端和根证书, 所以仍需要我们以自签证的方式生成根证书以及客户端证书

访问测试

访问方式1:curl带证书访问

   curl --cert ./client.crt --key ./client.key https://xxx.xxx.com -k

访问方式2:postman

1.在设置General中先把SSL certificate verification关掉

在这里插入图片描述

 2.可以Certificates中配置p12文件,p12文件可以认为是一对公私钥的合体文件, 同时也要配置p12文件的密码。注意这里的地址和端口要与实际的一致,否则请求时会认证失败。

在这里插入图片描述

 3.也可以在Certificates中配置客户端公私钥证书。无需配置密码

在这里插入图片描述

 

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一个开源的轻量级虚拟化平台,可以帮助用户打包、分发和运行应用程序以及其依赖项,使得应用程序在不同的环境中具备可移植性和一致性。 Nginx是一个高性能的开源HTTP服务器和反向代理服务器,可以用于处理静态和动态内容,支持高并发和负载均衡。 OpenSSL是一个开放源代码的软件库,用于实现安全的套接字层(SSL)和传输层安全(TLS)协议,提供了加密和认证机制,用于保护网络通信的安全性。 双向认证是指在客户端和服务器之间建立安全通信时,双方都需要验证对方的身份。在Docker环境中使用Nginx和OpenSSL实现双向认证可以提高通信的安全性。 首先,需要生成证书和私钥。可以使用OpenSSL生成自签名的证书和私钥,其中私钥用于签署证书,并使用公钥加密通信。 然后,将生成的证书和私钥加载到Docker容器中的Nginx配置文件中。在Nginx配置文件中,需要配置SSL证书和私钥的路径,并启用SSL功能。 接下来,需要配置Nginx双向认证。在Nginx配置文件中,需要指定客户端验证的方式为ssl_verify_client,并设置为on。这样Nginx会要求客户端提供证书进行认证。 最后,需要在客户端上生成证书和私钥,并将证书加入到操作系统的信任列表中。客户端发起请求时,Nginx会验证客户端提供的证书和私钥。 使用Docker、Nginx和OpenSSL实现双向认证可以确保服务器和客户端之间的通信安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值