之前我们学习过https ,在服务器端部署证书,客户端通过对证书的验证目标服务器的合法性。那么如果服务器端设置了双向认证,浏览器该如何访问呢,这里我们采用nsq 的 nsqd服务来模拟https双向认证服务。
如果不了加解密https双向认证等解密码学知识请先阅读: 密码学看这篇就够了
如果对nsq服务不了解可以参考: nsq详细教程系列
启动双向认证web服务
nsq服务介绍及如何启动双向证书验证的http服务参考nsq系列博客snqdTLS及证书验证测试
[root@localhost bin]# ./nsqd --config nsqd.conf
[nsqd] 2022/04/19 04:30:58.558844 INFO: nsqd v1.2.1 (built w/go1.16.6)
[nsqd] 2022/04/19 04:30:58.558899 INFO: ID: 856
[nsqd] 2022/04/19 04:30:58.560390 INFO: TOPIC(t1): created
[nsqd] 2022/04/19 04:30:58.560472 INFO: TOPIC(t1): new channel(c1)
[nsqd] 2022/04/19 04:30:58.560528 INFO: NSQ: persisting topic/channel metadata to nsqd.dat
[nsqd] 2022/04/19 04:30:58.563359 INFO: LOOKUP(127.0.0.1:4160): adding peer
[nsqd] 2022/04/19 04:30:58.563373 INFO: LOOKUP connecting to 127.0.0.1:4160
[nsqd] 2022/04/19 04:30:58.563574 INFO: HTTP: listening on [::]:4151
[nsqd] 2022/04/19 04:30:58.563586 INFO: HTTPS: listening on [::]:4152
[nsqd] 2022/04/19 04:30:58.563619 INFO: TCP: listening on [::]:4150
[nsqd] 2022/04/19 04:30:58.563659 INFO: LOOKUPD(127.0.0.1:4160): channel REGISTER t1 c1
[nsqd] 2022/04/19 04:30:58.563667 INFO: LOOKUP connecting to 127.0.0.1:4160
直接通过postman 调用接口直接报错,因为未使用客户端证书验证,浏览器访问 也是同样报错
生成客户端证书
要求客户端证书 和 服务器端证书 有相同的ca证书,证书签发方式见openssl 签发证书
这里把生成好的客户端证书 转为 pkcs12格式
[root@localhost certs]# openssl pkcs12 -export -clcerts -in client.pem -inkey client.key -out client.p12
Enter Export Password:
Verifying - Enter Export Password:
[root@localhost certs]# ll
total 56
-rw-r--r--. 1 root root 993 Apr 17 22:42 ca.csr
-rw-r--r--. 1 root root 1675 Apr 17 22:36 ca.key
-rw-r--r--. 1 root root 1184 Apr 17 22:44 ca.pem
-rw-r--r--. 1 root root 1261 Apr 17 21:03 cert.pem
-rw-r--r--. 1 root root 993 Apr 17 23:12 client.csr
-rw-r--r--. 1 root root 1675 Apr 17 23:11 client.key
-rw-r--r--. 1 root root 2637 Apr 19 04:17 client.p12
-rw-r--r--. 1 root root 4596 Apr 17 23:13 client.pem
-rw-r--r--. 1 root root 1704 Apr 17 21:03 key.pem
-rw-r--r--. 1 root root 993 Apr 17 22:47 server.csr
-rw-r--r--. 1 root root 1675 Apr 17 22:46 server.key
-rw-r--r--. 1 root root 4597 Apr 17 22:59 server.pem
浏览器导入证书
以搜狗浏览器为例,设置->intenet选项 ->内容 ->证书
点击导入 打开 证书导入向导
点击下一步 选择证书 并导入
下一步让输入密码,输入证书生成时的密码 我这里时123456
下一步 选择证书存储位置为个人
再下一步导入完成
浏览器访问验证
打开浏览器 访问测试地址 ,自动弹出让我们选择证书窗口
选择 正确的证书点击确定 就可以正常访问 了如下