手动获取我们所感兴趣网站X.509证书的一般方法
怎样手动获取我们所感兴趣网站的公钥证书?
本文由CSDN-蚍蜉撼青松【主页:http://blog.csdn.net/howeverpf】原创,转载请注明出处!
一、通过抓包从网络协议数据流中获取
因为不管怎么说,在SSL协议的握手阶段,服务器必然会向客户端/浏览器发送自己的证书,所以我要详细说的这第一种获取证书的方法就是通过抓包从网络协议数据流中获取,这是一种通用性非常好的方法。以利用Wireshark 1.10(当然你若是有其他习惯的抓包工具也可以,只要支持SSL协议解析即可)获取account.test01.com的服务器证书例,方法如下:
(1)使用Wireshark 1.10把登录account.test01.com过程的HTTPS会话数据抓取下来(抓包的过程就不多说了,不会问度娘),为了后面定位数据包方便,抓包要尽量干净、完整;
(2)为了防止你还是不小心抓住了其他HTTPS会话的数据,你可以在Windows的命令提示符下用nslookup命令查询account.test01.com的IP地址,假如是192.168.1.57;
(3)使用 Ctrl+F 组合键打开查找对话框,By(查找类型)选择String,Search In(查找区域)选择Packet list,过滤条件写 Certificate ,设定完毕点 Find。如下图:
图1-1 查找对话框设置
(4)查看所查找到的数据包的源IP地址,是否为第(2)步中所获取的192.168.1.57,若是,则成功定位所需数据包;否则使用 Ctrl+N 组合键查看下一个符合查找条件的数据包,直到找到所需数据包为止;
(a)证书和Sever Hello消息分开发
(b)证书和Sever Hello消息在一个包里
图1-2 定位证书所在数据包的两种情况
(5)在上步定位好的数据包中找到证书链所在,如下图靛青色框所标注,
图1-3 证书和证书链在数据包中所处的位置
如上图,很多时候服务器发送的不止是自己的应用证书,而是会带上完整的证书链,其中第一个是本应用(即account.test01.com)的证书,图中黑色框标注。【应用证书的持有者,很多时候会使用通配符,例如本例中,account.test01.com所发送证书的持有者是*.test01.com,如果有类似于prox.test01.com,photo.test01.com之类的域名,他们也可以使用这个证书】
另外,图中灰色框标注了给该应用签名的子CA【即DigiCert High Assurance CA-3】的公钥证书,浅灰色框标注了上级CA【即DigiCert High Assurance EV Root CA】的公钥证书。
(6)Wireshark 提供了比较方便地方法从数据包中拷贝出证书,在上图中标注的证书所在位置右键,依次选择"copy"-->"Bytes"-->"Hex Stream",获取16进制流形式的证书文件。如下图:
图1-4 证书信息的拷贝
(7)找一款支持16进制流拷贝的工具,比如010Editor,新建一个文件,把上一步得到的十六进制流复制到本文件(一定注意不能使用简单的文本复制,必须基于16进制流格式粘贴,010Editor中使用 Ctrl+Shift+V 组合键即可达到此效果),文件另存为account.test01.com.der。这就是我们要的证书,可以直接双击打开。
二、通过浏览器自带的证书复制/导出功能
我要介绍的第二种方法,有一定局限性,但是操作更为简单。我们平时用浏览器访问HTTPS网站时,如果你有细心观察的话,应该能看到浏览器地址栏会有个小锁(不同浏览器显示的位置不太一致),对于搜狗浏览器,如图2-1。
图2-1 搜狗浏览器访问https站点时的地址栏
点击这个小锁,弹出如下提示:
图2-2 "查看证书信息"
单击“查看证书信息”弹出证书,在“详细信息”选项卡下有个“复制到文件”按钮,如图2-3,点击后按照提示即可成功获取证书文件。
图2-3 证书复制
这个方法的局限性在于只适用于可用浏览器访问的网站,对于那些只用客户端(或者手机应用)访问的网站就无能为力,因为人家的客户端或应用往往都不提供证书复制或导出功能;即使是可用浏览器访问的网站,也只适用于直接使用https协议的网站(比如Gmail),不适用于临时从http跳转到https又跳回http的情况(比如12306)。
三、写在结尾
本文主要内容节选自作者本人在CSDN论坛上的回复帖,原帖链接:http://bbs.csdn.net/topics/390467536
By The Way
本文只为技术分享,作者本人一向认为,技术本身是没有好坏的,关键在于人心!
:)希望看到本文的读者也能认同我这个观点~
------本文由CSDN-蚍蜉撼青松【主页:http://blog.csdn.net/howeverpf】原创,转载请注明出处!------
手动获取我们所感兴趣网站X.509证书的一般方法相关推荐
- 访问Oracle em https https://localhost:1158/em 报访问网页提示此网站的安全证书有问题解决方法
访问Oracle em https https://localhost:1158/em 报访问网页提示此网站的安全证书有问题 因为ie10.ie11等对不安全的链接,管理更加严格,低安全级别,不能解决 ...
- ASP.NET Core DI 手动获取注入对象
ASP.NET Core DI 一般使用构造函数注入获取对象,比如在ConfigureServices配置注入后,通过下面方式获取: private IValueService _valueServi ...
- 002 第一季SpringBoot2核心技术-核心功能:配置文件、Web开发(原生组件)、数据访问、单元测试、指标监控、原理解析:@Value、命令行参数、手动获取bean、自定义starter
三.核心技术之- ->核心功能 1. 配置文件 1.1 文件类型 1.1.1 properties 同以前的properties用法 优先级高于yml的方式. 1.1.2 yaml 1) 简介 ...
- php中获取网站访客来源的关键词方法
php中获取网站访客来源的关键词方法,收集了 <?phpclass keyword{public function getKeyword($referer){ if(strpos($refere ...
- 【工具类】手动获取被spring管理的bean对象
package com.zxl;import org.springframework.beans.BeansException; import org.springframework.context. ...
- C/C++中手动获取调用堆栈【转】
转自:http://blog.csdn.net/kevinlynx/article/details/39269507 版权声明:本文为博主原创文章,未经博主允许不得转载. 当我们的程序core掉之后, ...
- 如何获取网站的HTTPS证书?
如果你的网站需要收集敏感信息(包括电子邮件和密码等),那么就需要保证网站的安全.最好的方法之一是启用HTTPS,以便自动加密进出服务器的任何信息,防止黑客窃取和篡改访客的信息. HTTPS超文本传输协 ...
- netbackup如何手动获取主机ID证书。
如何手动获取主机ID证书. 文章:100039650 最后发布:2017-09-21 评分: 20 11 产品:NetBackup 问题 从NetBackup V8.1开始,管理员需要在证书颁发机构 ...
- 微软小娜 服务器连不上,win10小娜提示“无法获取你感兴趣的信息,因为你处于离线状态”的解决方法...
win10系统下的小娜是微软官方随win10系统发布的人工智能机器人,用户通过小娜即可以进行人机对话,不过近期有部分用户在运行win10小娜时,打开小娜提示"无法获取你感兴趣的信息,因为你处 ...
- 10个最好的获取免费书籍的网站
原文地址:转载: 10个最好的获取免费书籍的网站 作者:dongtao 今天在网上看到这个Top Ten Best Places To Get Free Books,觉得很不错,和大家来分享: 1.F ...
最新文章
- python 队列 一次取多个_Queue 队列模块-Python成为专业人士笔记
- 桌面计算机密码应由哪项组成,计算机应用能力考试模拟试题
- 拼接字符串时的引号嵌套
- mysql使用了索引还是慢,`MySQL GROUP BY使用索引时速度较慢
- SQL DATACOMPARE 实现两个数据库的同步处理.
- 相近字符串的匹配--编辑距离问题
- python-绘制双轴柱状图
- 金蝶K3销售价格控制模块探讨
- flask框架之jinjia2模版语法详解
- 人员招聘与培训实务【1】
- 语言设置修复计算机 没有光盘,如何在Windows中创建系统修复光盘
- C++:日志库log4cplus 2.0的使用说明
- C++ 获取特定进程的CPU使用率
- 基础补充——为什么电流的波峰波谷很多毛刺?
- java语言程序设计与数据结构基础篇,2万字20个项目实例
- Centos7 配置netatalk搭建mac Time Machine
- YL-236点阵汉字LED显示C语言
- 计算机报录比10:1,中国石油大学(华东)比去年大幅增加!
- CenturyLink将在新加坡设立安全运营中心
- android8.1.0官方下载,官方Xposed框架For Android8.0/8.1(Oreo)发布v90-beta3版本