使用Nginx实现HTTPS双向验证的方法
来源:互联网 发布:最全的淘宝隐藏券网站 编辑:程序博客网 时间:2024/05/27 12:21
单向验证与双向验证的区别:
单向验证: 指客户端验证服务器端证书,服务器并不需要验证客户端证书。
双向验证:指客户端验证服务器端证书,而服务器也需要通过CA的公钥证书来验证客户端证书。
详细的握手过程:
单向验证
浏览器发送一个连接请求给安全服务器。
1、服务器将自己的证书,以及同证书相关的信息发送给客户浏览器。
2、客户浏览器检查服务器送过来的证书是否是由自己信赖的CA中心所签发的。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告消息:警告客户这个证书不是可以信赖的询问客户是否需要继续。
3、接着客户浏览器比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。
4、浏览器随机产生一个用于后面通讯的“通话密钥”,然后用服务器的公钥对其加密,然后将加密后的“预主密码”传给服务器。
5、服务器从客户发送过来的密码方案中,选择一种加密程度最高的密码方案,用服务器的私钥加密后通知浏览器。
6、浏览器针对这个密码方案,接着用服务器的公钥加过密后发送给服务器。
7、服务器接收到浏览器送过来的消息,用自己的私钥解密,获得。
8、服务器、浏览器接下来的通讯都是用对称密码方案,使用相同的对称密钥。
双向验证
1、浏览器发送一个连接请求给安全服务器。
2、服务器将自己的证书,以及同证书相关的信息发送给客户浏览器。
3、客户浏览器检查服务器送过来的证书是否是由自己信赖的CA中心所签发的。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告消息:警告客户这个证书不是可以信赖的询问客户是否需要继续。
4、接着客户浏览器比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。
5、服务器要求客户的身份认证,用户可以建立一个随机数然后对其进行数字签名,将这个含有签名的随机数和客户自己的证书以及加密过的“预主密码”一起传给服务器。
6、服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的CA 是否可靠,发行CA 的公钥能否正确解开客户证书的发行CA的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的“预主密码”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。
7、客户浏览器告诉服务器自己所能够支持的通讯对称密码方案。
8、服务器从客户发送过来的密码方案中,选择一种加密程度最高的密码方案,用客户的公钥加过密后通知浏览器。
9、浏览器针对这个密码方案,选择一个通话密钥,接着用服务器的公钥加过密后发送给服务器。
10、服务器接收到浏览器送过来的消息,用自己的私钥解密,获得通话密钥。
11、服务器、浏览器接下来的通讯都是用对称密码方案,使用相同的对称密钥。
一、自建CA,签署证书
使用openssl制作CA的自签名证书
准备服务器端证书
准备客户端证书
注意事项:
1、制作证书时会提示输入密码,设置密码可选,服务器证书和客户端证书密码可以不相同。
2、服务器证书和客户端证书制作时提示输入省份、城市、域名信息等,需保持一致。
3、以下信息根证书需要和客户端证书匹配,否则可能出现签署问题。
countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = match
如何指定签署证书的签名算法
查看使用的签名算法:
二、提供Nginx配置文件
客户端证书格式转换
三、将证书导入浏览器,这里以Chrome为例
1、在浏览器窗口右上角找到设置
2、在设置窗口中找到高级设置
3、找到管理证书
4、点击导入证书,然后选择证书路径就可以了
5、在导入证书之后就可以正常访问到服务器数据了
6、如果没有成功导入客户端证书就访问服务器的话,那么服务器验证客户端证书这步就会失败,然后返回如下错误
由于用的是自签证书不被公有CA信任,所以https那里会有红叉。
以上所述是小编给大家介绍的使用Nginx实现HTTPS双向验证的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
- 使用Nginx实现HTTPS双向验证的方法
- nginx配置ssl双向验证的方法
- https实现双向验证请求
- nginx+openssl+https 实现双向认证所遇到的坑
- nginx配置ssl双向验证 nginx https ssl证书配
- nginx与ios实现https双向认证
- ios AFNetworking https 双向证书验证实现
- 关于Okhttp3 https双向验证实现代码
- https nginx 双向认证
- iOS开发 - 用AFNetworking实现https单向验证,双向验证
- eclipse中使用Jetty插件实现https请求与SSL双向验证
- eclipse中使用Jetty插件实现https请求与SSL双向验证
- HttpsUrlConnection https双向验证
- AsyncHttpClient实现https,并且实现SSL双向验证
- Android HTTPS(SSL)双向验证服务器验证的一种思路
- 自签SSL证书实现Nginx配置https双向认证
- HTTPS网络加密双向验证->使用AFNetworking封装
- C#中实现https的双向认证
- 常用汇编指令集合
- mysql 安装配置 linux
- RocketMQ原理解析-producer 4.发送分布式事物消息
- 将一个数组中的内容拼接到另一个数组中-并不是push而是concat
- 实现启动app,首页倒计时跳转,也可点击按钮进行跳转
- 使用Nginx实现HTTPS双向验证的方法
- 图形界面扩容缩容acfs文件系统
- spring mvc 5.0 RequestParam详解 06
- H5-12人牛牛架设教程
- Petya and Staircases CodeForces
- js 按照特定日期格式获取当前时间
- org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-dat
- 如何解析DICOM文件中的Pixel Data ?
- ARM GCC 内嵌(inline)汇编手册