在客户端程序中使用OpenSSL来实现HTTPS在证书认证上的一些分析
2016-12-26 18:28
417 查看
在客户端程序中使用OpenSSL来实现HTTPS在证书认证上的一些分析
ssl握手一般流程:
http://blog.csdn.net/wzsy/article/details/38332819
通过wireshark抓包,可以确认一般情况下SSl握手的主要过程:
1.客户端发送client hello,发送随机数、算法集;
2.服务器端发送server hello,发送随机数,协商的算法;
3.服务器端发送Certifacate,内含证书或者证书链;
4.服务器端发送Server Key Exchange,交换对称密钥;
5.客户端发送Client Key Exchange,交换对称密钥;
6.开始用对称密钥加密数据并传输。
在第3、4步之间,客户端需要验证服务端的证书(可选),检查抓包文件中服务器端发送过来的证书链,发现其证书链不包含根证书;
用openssl命令行验证证书链:
[@he ~]$ openssl s_client -showcerts -connect xxx.com:443
会得到包含根证书的完整证书链。
注意:
一般服务器发回的证书链中都不会包含根证书,因为要求根证书在浏览器或者系统中已经安装,以保证最根本的安全性。
http://security.stackexchange.com/questions/65332/ssl-root-certificate-optional
The server always sends a chain. As per the TLS
standard, the chain may or may not include the root certificate itself; the client does not need that root since it already has it. And, indeed, if the client does not already
have the root, then receiving it from the server would not help since a root can be trusted only by virtue of being already there.
综上:
1.客户端APP需要获得一个根证书(系统、浏览器一般自带一些根证书,也可以手动安装,如果没有,则手动拷贝一份),并调用SSL_CTX_load_verify_locations函数设置,使之成为一个可信任的证书;
2.在服务器端的证书返回之后,OpenSSL会根据本地的受信证书验证服务器端证书链;
3.通过调用SSL_set_verify设置验证证书的回调,通过回调的参数可以获取验证的结果、错误码、错误的证书深度等信息;
4.确保证书验证通过的核心就是要保证从服务器端返回的证书能在本地的受信证书中追根溯源“找到根”,否则认证会失败并会报告找不到发布者错误。
ssl握手一般流程:
http://blog.csdn.net/wzsy/article/details/38332819
通过wireshark抓包,可以确认一般情况下SSl握手的主要过程:
1.客户端发送client hello,发送随机数、算法集;
2.服务器端发送server hello,发送随机数,协商的算法;
3.服务器端发送Certifacate,内含证书或者证书链;
4.服务器端发送Server Key Exchange,交换对称密钥;
5.客户端发送Client Key Exchange,交换对称密钥;
6.开始用对称密钥加密数据并传输。
在第3、4步之间,客户端需要验证服务端的证书(可选),检查抓包文件中服务器端发送过来的证书链,发现其证书链不包含根证书;
用openssl命令行验证证书链:
[@he ~]$ openssl s_client -showcerts -connect xxx.com:443
会得到包含根证书的完整证书链。
注意:
一般服务器发回的证书链中都不会包含根证书,因为要求根证书在浏览器或者系统中已经安装,以保证最根本的安全性。
http://security.stackexchange.com/questions/65332/ssl-root-certificate-optional
The server always sends a chain. As per the TLS
standard, the chain may or may not include the root certificate itself; the client does not need that root since it already has it. And, indeed, if the client does not already
have the root, then receiving it from the server would not help since a root can be trusted only by virtue of being already there.
综上:
1.客户端APP需要获得一个根证书(系统、浏览器一般自带一些根证书,也可以手动安装,如果没有,则手动拷贝一份),并调用SSL_CTX_load_verify_locations函数设置,使之成为一个可信任的证书;
2.在服务器端的证书返回之后,OpenSSL会根据本地的受信证书验证服务器端证书链;
3.通过调用SSL_set_verify设置验证证书的回调,通过回调的参数可以获取验证的结果、错误码、错误的证书深度等信息;
4.确保证书验证通过的核心就是要保证从服务器端返回的证书能在本地的受信证书中追根溯源“找到根”,否则认证会失败并会报告找不到发布者错误。
相关文章推荐
- 在linux(centos)使用openssl生成https证书并配置到nginx的实现过程
- 原来win+apache实现ssl的证书认证如此简单 +使用openssl来生成CA证书、申请证书、颁发证书以及撤销证书的过程
- openssl实现双向认证教程(服务端代码+客户端代码+证书生成)
- SSL双向认证以及证书的制作和使用-https+客户端身份验证
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
- 使用Volley实现Https请求, Volley SSL 双向自认证证书请求。
- 使用 Socket 通信实现 FTP 客户端程序
- Java Tip 96: 使用 HTTPS 编写客户端程序
- 使用 Socket 通信实现 FTP 客户端程序(二)
- 使用 HTTPS 编写客户端程序
- Asp.Net实现FORM认证的一些使用技巧
- 使用OpenSSL实现证书操作
- xp下使用Openssl来制作证书,在IIS中配置Https笔记
- 使用 Socket 通信实现 FTP 客户端程序
- 编写的vs2005水晶报表程序在vs2008下正常使用的一些实现方法
- net控件中数据导到Excel的格式 首先,我们了解一下excel从web页面上导出的原理。当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果cell没有规定的格式,则excel会以默认的格式去呈现该cell的数据。这样就给我们提供了自定义数据格式的空间,当然我们必须使用excel支持的格式。下面就列出常用的一些格式: 1) 文本
- Apache+tomcat配置Openssl 之指定客户端目录使用Https
- 使用 Socket 通信实现 FTP 客户端程序
- xp下使用Openssl来制作证书,在IIS中配置Https笔记
- keytool+tomcat配置HTTPS双向证书认证(无openssl)