HTTPS的认证有两种,一种是单向认证,即客户端验证服务器,只确保服务器的身份是正确的;另一种是双向认证,即客户端要验证服务器,服务器也要验证客户端的身份,即双方都要证明我是我,彼此也都确认你是你 一张图简单明了的说明下HTTS单向认证的工作原理: ? 单向认证流程: 1.客户端发送消息到服务端 2.服务端将证书、公钥等发给客户端 3.客户端使用CA验证证书,成功继续、不成功弹出选择页面 4.客户端告知服务端所支持的加密算法 5.服务端选择最高级别加密算法明文通知客户端 ,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。 是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。
个人博客 https://zhaoxiaobin.net https://ppbin.gitee.io ---- HTTPS介绍 HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信 HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的安全性与完整性。 1、单向认证 单向认证主要是客户端认证服务端,Https在建立Socket连接之前,需要进行握手,具体过程如下: 客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。 2、双向认证 双向认证和单向认证原理基本差不多,只是除了客户端需要认证服务端以外,增加了服务端对客户端的认证,具体过程如下: 客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。 在接下来的会话中,服务器和客户端将会使用该密码进行对称加密,保证通信过程中信息的安全。 参考链接 Https单向认证和双向认证
提供包括云服务器,云数据库在内的90+款云计算产品。打造一站式的云产品试用服务,助力开发者和企业零门槛上云。
Tomcat下配置HTTPS单向认证配置如下: 准备文件:server.jks servertrust.jks 参考上一篇公众生成这两个文件 1.进入tomcat配置目录,即tomcat 找到如下位置,默认是注释掉的,可搜索8443寻找 ? 3.解开注释,修改如下 ? .Http11Protocol SSLEnabled:是否使用SSL,默认,true,HTTPS必须为true clientAuth:客户端认证,true:双向认证,会请求客户端证书,对客户端进 行认证;false:单向认证,此处使用单向认证,填false keystoreFile:证书库文件,填写server.jks :信任的证书库文件的密码,制作证书时填写的
来源: https://blog.csdn.net/duanbokan/article/details/50847612 一、Http HyperText Transfer Protocol,超文本传输协议 使用TCP端口为:80 二、Https Hyper Text Transfer Protocol over Secure Socket Layer,安全的超文本传输协议,网景公式设计了SSL(Secure 对称加密 速度高,可加密内容较大,用来加密会话过程中的消息 公钥加密 加密速度较慢,但能提供更好的身份认证技术,用来加密对称加密的密钥 四、单向认证 Https在建立Socket连接之前,需要进行握手 返回的公钥是否能正确解开返回证书中的数字签名 服务器证书上的域名是否和服务器的实际域名相匹配 验证通过后,将继续进行通信,否则,终止通信 4、客户端向服务端发送自己所能支持的对称加密方案,供服务器端进行选择 五、双向认证 双向认证和单向认证原理基本差不多,只是除了客户端需要认证服务端以外,增加了服务端对客户端的认证,具体过程如下: ? 1、客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。
Android / 抓 / 包 / 总 / 结 Android抓包总结 HTTPS单向认证&双向认证突破 ? 前言 ? ? 在被问到抓包时的一些问题:证书、单向认证、双向认证怎么处理,以及绕过背后的原理时,一时很难说清个大概,于是整理了下思绪,将这些知识进行总结和整理,末尾再对一个某社交APP进行实战突破HTTPS双向认证进行抓包 证书 = 公钥+信息摘要+签名 由于在客户端操作系统中就预留了CA的公钥,所以支持解密签名。 有了这些概念,来看看https是怎么做到安全认证的。 02 HTTPS单向认证 ? 03 HTTPS双向认证 ? 双向认证和单向认证过程差不多,但是多了客户端向server发送证书并校验的过程。然后客户端按照服务器约定的方式将F秘钥发给server,双方按照这个方式来进行通讯。 突破某社交APP HTTPS双向认证 ?
单向认证,说的是浏览器验证服务器的真实性,双向认证是服务器也验证浏览器用户的真实性。 ://www.fengyunhe.com:8443/就可以发现出现浏览器对于没有认证证书的警告信息。 我们安装cert证书到系统中,人工加入到可信任的根证书颁发机构中,就好了。 如果是双向的认证,则需要将浏览器端生成的证书导入到服务器端的密钥库中,也就是keystore文件中。 4、将证书导入到server端的密钥库信任链中 keytool -import -file client.key.cer -keystore fengyunhe.keystore 5、在tomcat的配置中开启客户端的认证 地址后就可以看到效果了,在打开浏览器访问server的时候,就会弹出证书确认的窗口。
2、单向认证配置和客户端调用 2.1、Nginx配置 编辑nginx.conf文件在http{...}配置块中新增一个server配置块。 单向认证只需要配置服务器的公私钥即可,这里的相对路径是相对Nginx的配置文件nginx.conf的路径而言的。 ,不仅客户端要认证服务端,服务端也需要认证客户端,所以相较于单向认证,会多出以下2个配置参数: ssl_verify_client on 表示开启双向认证,服务端也要认证客户端,该参数默认是off关闭。 3.3、浏览器调用 浏览器一般用单向认证会比较多,双向认证的详细配置步骤这里就不多啰嗦了。 3.4、Java客户端调用 这里我们使用httpclient来发起https的请求进行双向认证。
2、单向认证配置和客户端调用 2.1、Nginx配置 编辑nginx.conf文件在http{...}配置块中新增一个server配置块。 /error1.log; # # 单独指定输出错误日志 location / { proxy_pass http://backend; } } 单向认证只需要配置服务器的公私钥即可 ,不仅客户端要认证服务端,服务端也需要认证客户端,所以相较于单向认证,会多出以下2个配置参数: ssl_verify_client on 表示开启双向认证,服务端也要认证客户端,该参数默认是off关闭。 最后发起请求 3.3、浏览器调用 浏览器一般用单向认证会比较多,双向认证的详细配置步骤这里就不多啰嗦了。 3.4、Java客户端调用 这里我们使用httpclient来发起https的请求进行双向认证。
HTTPS中的S表示SSL或者TLS,就是在原HTTP的基础上加上一层用于数据加密、解密、身份认证的安全层,即 HTTP + 加密 + 认证 + 完整性保护 = HTTPS 加密相关的预备知识:对称加密和非对称加密 HTTPS单向认证 先来看看单向认证的过程: ? image.png 从上图可以看出,服务端拥有一对非对称密钥:B_公钥和B_私钥。 和之前的非对称加密不同,这里开始就是一种对称加密的方式 HTTPS双向认证 双向认证和单向认证原理基本差不多,单向认证客户端需要认证服务端,而在双向认证中增加了服务端对客户端的认证 ? image.png 双向认证详细过程如下: (1)客户端发起HTTPS请求,将SSL协议版本的信息发送给服务端。 (2)服务端去CA机构申请来一份CA证书,在前面提过,证书里面有服务端公钥和签名。 简单来说: 截获客户端的HTTPS请求,伪装成中间人客户端去向服务端发送HTTPS请求 接受服务端返回,用自己的证书伪装成中间人服务端向客户端发送数据内容。 具体过程如下图所示: ?
为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。 [Unknown]: mingongge.com 输入组织单位名称 What is the name of your organization? [no]: y 确认配置 Enter key password for <tomcat8> (RETURN if same as keystore password): 如果与前面相同直接回车 因为是自生成的证书,所以才会出现上述证书安全有问题,点击继续浏览此网站即可 ? 可能会有的小伙伴会说,https协议默认端口是443,你这是8443完全不一样,其实你错了,无非是个端口而已,因此回头将配置文件里的Connector port="8443"修改成如下 Connector
(1) 直接配置在项目上面 (2) 配置在项目启动所依赖的tomcat上 (3) 配置在nginx上( 单向认证, 双向认证, 多域名认证) … … 而这里则主要介绍了两种配置方式, 第一种是在项目中直接配置 通过nginx配置证书(单向认证) 单向认证流程 https单向认证的流程大致如下: 客户端发送https连接请求, 并发送ssl协议相关信息, 服务器返回ssl协议信息以及公钥证书 客户端校验公钥证书 • 服务器证书上的域名是否和服务器的实际域名相匹配 • 通过后,将继续进行通信,否则,终止通信 https的双向认证比起单向认证, 主要是在客户端验证服务端证书安全后, 将自己客户端的证书发送给服务端 浏览器访问 浏览器一般用单向认证会比较多,双向认证的详细配置步骤这里就不多说了。 Nginx配置Https单向认证、双向认证以及多证书配置 7. 双向认证开发实践
在一次测试中偶然遇到一个https双向认证的手机app(fiddler抓包提示需要提供客户端证书),平时一梭子能搞定地抓包姿势没有效果了,本着所有客户端发出的数据都是操控的想法,决定搞一搞,无非是采用什么方式的问题 双向认证只要拿到客户端加密的私钥证书就行了。 很不巧,手机app被加壳了,基本上告别动态调试的方式。 ? 在assets目录下发现了用于双向认证的证书库文件,如下: ? 关键代码在函数m8196a中,具体代码如下:(因为没有写过相关双向认证和keystore的相关代码,只能通过java api 文档查查函数说明,补充了注释) String str = "X509" 误以为已经搞定了双向认证,打开了burpsuite导入证书: ? Pkcs12格式,暴露了我对证书相关格式的盲区,google告诉我用keytool可以进行证书格式的转换,如下: ? Emmmm? 证书库可能有什么问题 网上找了httpsURLConnection类的双向https的实现demo——几乎完全一致。
单向认证vs双向认证: 上面所述的是 双向认证SSL 协议的具体通讯过程,这种情况要求服务器和客户端双方都有证书。 单向认证SSL 协议不需要客户端拥有CA证书,具体的流程相对于上面的步骤,只需将服务器验证客户端证书的步骤去掉,以及在协商对称密码方案,对称通话密钥时,服务器发送给客户端的是没有加过密的(这并不影响SSL 一般Web应用都是采用单向认证的,原因很简单,用户数目广泛,且无需做在通讯层做用户身份验证,一般都在应用逻辑层来保证用户的合法登入。 但如果是企业应用对接,情况就不一样,可能会要求对客户端(相对而言)做身份验证。这时就需要做双向认证。 如果用户遇到的问题不能解决,可通过合信官网客服寻求帮助,凡是选择[合信ssl证书](https://ssl.51mubanji.com)的网站用户,合信可提供免费一对一的ssl证书技术部署支持,免除后顾之忧
总述 https简单来说就是在http协议的基础上增加了一层安全协议。通常为TLS或者SSL(一般现在都采用TLS,更加安全)。这一层安全协议的最主要的作用有两个: 1. 商量出最终用来http通信的对称加密秘钥 本次仅仅讲第1点 ---- 单向认证与双向认证 所谓的认证既确认对方身份,单向认证一般是指客户端确认服务端身份,双向认证则是指在客户端需要确认服务端身份的同时, 具体可以通过下面两幅图来看下区别: 单向认证 ? 双向认证 ? ---- show me the code 这里给出在使用httpClient的时候如何初始化连接池。 public class HttpClientInitConfig { /** * ssl双向认证证书 默认客户端不验证服务端返回 */ private TrustStrategy ,根证书能对所有子证书进行验证,在进行双向认证的时候服务端和客户端需要初始化的证书都是从根证书生成的 在TLS协议过程中发送的客户端和服务端证书(.crt)其实都是公钥证书,外加一些版本号、身份、签名等信息
2.公钥加密 加密速度较慢,但能提供更好的身份认证技术,用来加密对称加密的密钥。 单向认证 Https在建立Socket连接之前,需要进行握手,具体过程如下: ? 双向认证 双向认证和单向认证原理基本差不多,只是除了客户端需要认证服务端以外,增加了服务端对客户端的认证,具体过程如下: ? ssl_verify_client on; #双向认证 ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 就可以使用了,默认443端口 四、验证 浏览器测试 使用https访问页面 https://192.168.0.162/ 展开,点击继续 效果如下: 提示需要证书才行,说明双向认证是正常的! ssl_verify_client on; #双向认证 ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3
4、私钥密码:可不填写 6、所属项目:默认项目即可 4.域名资料填写完成后,进入下一步,选择手动DNS验证。 申请通过后,进入SSL证书列表,将所申请的域名SSL证书下载到本地后,上传到你域名所在服务器即可 nginx配置ssl证书 拿到的证书分两个文件,一个是xxx.crt,一个是xxx.key,分别对应公钥和私钥 我们找到类似下面的段:修改server{---}里面的内容 3.如果只想让网站支持https访问,那么在server_name下面插入两行,添加两行内容: listen 443; ssl on; 4.如果想让网站兼容http和https访问,那么在server_name下面插入一行,添加一行内容: listen 443 ssl 5.在root /home... 执行后,在浏览器中输入https的网址进行访问,如果地址栏边上有个小锁的标志,则证明升级成功,恭喜自己吧!
发表于2018-12-122019-04-28 作者 wind 今天遇到了一个问题,就是使用chrome可以正常打开的网站,在部分android系统上无法打开,说的是证书的问题,总之大意思就是缺少中间证书 ,想要知道是否缺少中间证书。 可以去这个网站分析一下,下载缺失的中间证书和根证书: https://www.myssl.cn/tools/downloadchain.html 还有一个国外的网站也是检测SSL证书是否安装正确的: https://www.geocerts.com/ssl-checker 如果证书链不完整的话会提示: image.png 难道Let’s Encrypt 申请完后给的那个 fullchain.cer 有了中间证书和根证书后,把内容追加在证书的里面,不要有空行,然后重启下web server 就可以了,验证通过以后是这样的: image.png
本篇文章涉及到的代码不多,主要内容是对HTTPS协议的讲解,最后将结合Retrofit实现HTTPS的单双向认证。 下面将通过以下几节内容来学习HTTPS: 1)HTTPS概述; 2)HTTPS实现原理; 3)数字证书; 4)Https单项认证; 5)Https双向认证。 我们上述讲到的内容其实都是说的HTTPS单项认证。通常来说对于安全性要求不高的网站单项认证就可以满足我们的需求了。因此我们访问的HTTPS网站大部分都是单项认证。 7、HTTPS双向认证 对于HTTPS双向认证,用到的情况不多。但是对于像金融行业等对安全性要求较高的企业,通常都会使用双向认证。 那么双向认证则保证了我们的客户端只能访问我们自己的服务器,同时我们的服务器也只能被我们自己的客户端访问。因此双向认证可以说相比单项认证安全性足足提高一个等级。
上一篇文章我们讲解了怎么给 GRPC 配置添加单向证书认证,这一篇我接着分享,如何让 GRPC 服务加入双向证书认证。 双向的证书认证,相比单向的证书认证,使用的地方更多些。 因为客户端和服务端各自都自己的证书,相对来说会更安全。 生成相关证书 我们依旧使用 openSSL 来自签证书,下面下依次生成证书的步骤记录。 这里我的证书全部采用 pem 的格式,和单向的证书不一样。 /tls/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:*.kun.com,DNS:*.henjinet.com")) 这里我们需要传入 CA 证书的根证书和私钥进行来签发下一级证书 服务端代码 证书生成完毕现在开始去调整我们的代码部分。
最典型的是 200(OK)201(创建成功) 3xx:重定向。如 301(永久移动)、302(暂时移动)、304(内容未改变) 4xx:客户端错误。 如 400(客户端请求错误)、401(认证失败)、403(被禁⽌)、404(找不到内容) 5xx:服务器错误。 x-www-form-urlencoded: Web ⻚⾯纯⽂本表单的提交⽅式 multitype/form-data: Web ⻚⾯含有⼆进制⽂件时的提交⽅式 application/json:body HTTPS 是在 HTTP 的基础上,增加一个安全层,用于保障HTTP的加密传输。 通信大概流程 客户端发起HTTPS连接请求 服务器发回证书 客户端校验证书 客户端信任服务器后,协商对称加密密钥 使用对称密钥开始通信 END!
物联网设备身份认证(IoT TID)为客户提供多安全等级、跨平台、资源占用少的物联网设备身份认证服务。通过控制台全流程可视化配置,帮助客户快速对接 TID 设备身份认证服务,全面提升各种物联网设备接入认证与数据的安全性……
扫码关注云+社区
领取腾讯云代金券