ssl单向证书和双向证书校验测试及搭建流程

零、前提准备

说明:
50.50.1.118作为服务端,系统是 linux,openssl版本是:OpenSSL 1.1.1f 31 Mar 2020。
50.50.1.116是客户端,系统是Windows,openssl版本是:OpenSSL 3.0.5 5 Jul 2022 (Library: OpenSSL 3.0.5 5 Jul 2022)。

1、CA机构之根证书的生成

# 生成CA机构私钥
openssl genrsa -out CA.key 2048
# 生成CA机构待签名证书
openssl req -new -key CA.key -out CA.csr
# 生成CA机构证书, 即根证书
openssl x509 -req -in CA.csr -extensions v3_ca -signkey CA.key -out CA.crt

2、服务端准备

# 生成私钥key
openssl genrsa -des3 -out server.key
# 由私钥生成待签名证书
openssl req -new -key server.key -out server.csr
# 对服务器证书签名
openssl x509 -days 365 -req -in server.csr -extensions v3_req -CAkey ../CA/CA.key -CA ../CA/CA.crt -CAcreateserial -out server.crt

3、 客户端准备

openssl genrsa -des3 -out client.key
openssl req -new -key client.key -out client.csr
openssl x509 -days 365 -req -in client.csr -extensions v3_req -CAkey ../CA/CA.key -CA ../CA/CA.crt -CAcreateserial -out client.crt
# 客户端证书转为p12格式(p12格式才能导入浏览器);
# 后续双向认证时,客户端发起请求时,要携带自己的证书到服务器;
# 怎么携带?将p12格式的证书导入浏览器即可;
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12


4、生成的证书

ssl单向证书和双向证书校验测试及搭建流程_第1张图片

一、单向证书校验

更多关于单向认证/双向认证的理论性知识,请猛戳:SSL单向认证和双向认证分析。

验证步骤:

1、修改nginx配置文件,将服务端证书和服务私钥进行指定,并重启nginx;
2、客户端将根证书添加到受信任的颁发机构中(可有可无);
3、打开浏览器,访问 https://50.50.1.118,可以看到服务器响应的结果(nginx欢迎页面);
4、可以通过wireshark进行抓包分析。


修改nginx.conf配置文件

ssl单向证书和双向证书校验测试及搭建流程_第2张图片


将根证书添加到受信任的机构中

ssl单向证书和双向证书校验测试及搭建流程_第3张图片



直接双击CA.crt进行安装即可。

ssl单向证书和双向证书校验测试及搭建流程_第4张图片


开始抓包

ssl单向证书和双向证书校验测试及搭建流程_第5张图片


抓包分析

可见,整个握手过程当中,只有服务器将自己的证书响应给客户端;
不存在客户端将自己的证书响应给服务器的情况;
此即为单向认证。下面再给出一个示例图。

ssl单向证书和双向证书校验测试及搭建流程_第6张图片

二、双向证书校验

对于一般的https网站来说,实际上https所使用的证书是属于单向验证,即客户端单向验证服务器的安全性,而服务器端是没有对客户端的身份进行验证的。如果自己部署了一些安全性较高的网站不希望被其他人随意访问,就可以尝试部署https的双向认证,对客户端也添加证书认证。

1、修改nginx配置文件,添加对客户端的证书校验,并重启nginx;

ssl单向证书和双向证书校验测试及搭建流程_第7张图片

2、打开谷歌浏览器,导入客户端证书;

ps:也可以直接在Windows证书管理器中添加添加,如下所示:

3、抓包验证


ssl单向证书和双向证书校验测试及搭建流程_第8张图片

可以看到,服务端和客户端分别给对方响应了各自的证书,此即为双向认证。

三、参考文章

1、https://zhuanlan.zhihu.com/p/377622199
2、http://www.meilongkui.com/archives/1670
3、https://www.cnblogs.com/simono/p/16629480.html
4、https://blog.csdn.net/qq_37997682/article/details/125472654

你可能感兴趣的:(Linux篇,ssl,服务器,https)