openssl访问https,怎么获取证书

问题描述

比如访问QQ邮箱:https://mail.qq.com/怎么获取它的证书,浏览器有个复制证书,复制后是.cer的,openssl能用吗,谢谢给个关键代码..

解决方案

解决方案二:
要不换个方法,,,不使用证书openssl怎么建立连接..
解决方案三:
如果网站是https的,必须使用openssl建立安全通道,也就是必须要用证书。.cer是证书的常用后缀,一般是asn.1编码的,openssl中有相关解析证书接口,链接:http://blog.csdn.net/wanjie518/article/details/6570141
解决方案四:
关于获取服务器证书就我所知,获取服务器证书通用的方法通常有两个,一个就是你已经提到的在浏览器自带的证书复制/导出功能,缺点只适用于可用浏览器访问的网站,对于那些只用客户端(或者手机应用)访问的网站就无能为力,因为人家的客户端或应用往往都不提供证书复制或导出功能;即使是可用浏览器访问的网站,也只适用于直接使用https协议的网站(比如Gmail),不适用于临时从http跳转到https又跳回http的情况(比如12306)。因为不管怎么说,在SSL协议的握手阶段,服务器必然会向客户端/浏览器发送自己的证书,所以我要详细说的第二种获取证书的方法就是通过抓包从网络协议数据流中获取。以利用Wireshark1.10(当然你若是有其他习惯的抓包工具也可以,只要支持SSL协议解析即可)获取account.xxx.cn的服务器证书例,方法如下:(1)使用Wireshark1.10把登录account.xxx.cn过程的HTTPS会话数据抓取下来(抓包的过程就不多说了,不会问度娘),为了后面定位数据包方便,抓包要尽量干净、完整;(2)为了防止你还是不小心抓住了其他HTTPS会话的数据,你可以在Windows的命令提示符下用nslookup命令查询account.xxx.cn的IP地址,假如是192.168.1.57;(3)使用Ctrl+F组合键打开查找对话框,By(查找类型)选择String,SearchIn(查找区域)选择Packetlist,过滤条件写Certificate,设定完毕点Find。如下图:
解决方案五:
关于证书文件的加载一般说来,当前主流网站都走的单项认证的路子,即只有服务器需向客户端发送证书,客户端不需向服务器发送证书。在这种情况下,加载证书是服务端需要做的事情。所以下面给个基于openssl的SSL服务端例程,内含加载证书的代码(有特别标注)://前面省略了服务端socket套接字的创建过程//接受客户端的socket连接m_nConversion=accept(nListen,(sockaddr*)&addr_client,&size);if(nClient==-1){printf("acceptfailed!n");continue;}//创建服务端SSL会话环境m_pServerCtx=SSL_CTX_new(SSLv23_server_method());if(m_pServerCtx==0){printf("SSL_CTX_newforServerfailed!n");return-1;}/*-------------------------Beginof:服务端公私钥加载-------------------------*///为服务端指定SSL连接所用公钥证书//参数m_pServerCtx,服务端SSL会话环境//参数pCertPath,你存放公钥证书的路径//参数SSL_FILETYPE_PEM,指定你所要加载的公钥证书的文件编码类型为Base64if(SSL_CTX_use_certificate_file(m_pServerCtx,pCertPath,SSL_FILETYPE_PEM)!=1){printf("SSL_CTX_use_certificate_filefailed!n");return-1;}//为服务端指定SSL连接所用私钥//参数m_pServerCtx,服务端SSL会话环境//参数pKeyPath,你存放对应私钥文件的路径//参数SSL_FILETYPE_PEM,指定你所要加载的私钥文件的文件编码类型为Base64if(SSL_CTX_use_PrivateKey_file(m_pServerCtx,pKeyPath,SSL_FILETYPE_PEM)!=1){printf("SSL_CTX_use_PrivateKey_filefailed!n");return-1;}//检查SSL连接所用的私钥与证书是否匹配【所以你仅有公约证书是不够的】if(!SSL_CTX_check_private_key(m_pServerCtx)){printf("Privatekeydoesnotmatchthecertificatepublickeyn");return-1;}/*-------------------------Endof:服务端公私钥加载-------------------------*///创建一个与客户端通信的SSL套接字m_pServerSSL=SSL_new(m_pServerCtx);if(m_pServerSSL==0){printf("SSL_newforServerfailed!n");return-1;}//将与客户端通信的SSL套接字&&socket套接字进行可读写地绑定SSL_set_fd(m_pServerSSL,m_nConversion);//接受客户端的SSL连接if(SSL_accept(m_pServerSSL)==-1){printf("SSL_set_fdforServerfailed!n");return-1;}//后面省略的是基于SSL_read()与SSL_write()的SSL通信过程

需要特别补充的是加载公私钥文件API函数的第三个参数,文件编码类型。当前证书文件有两种编码类型,即:二进制编码【宏定义为SSL_FILETYPE_ASN1】与ASCII(Base64)【宏定义为SSL_FILETYPE_PEM】编码。对于公约证书的加载,它两种类型都支持,但函数本身并不能自动同时识别处理两种类型,必须由用户在调用的时候根据自己所用文件的类型自行指定;对于私钥文件的加载,则仅支持SSL_FILETYPE_PEM。第三个参数的取值务必和你要加载的公钥证书文件的编码类型相匹配。若是你第三个参数设为SSL_FILETYPE_PEM,实际加载的却是一个二进制编码的证书文件,加载就会出错。针对你要加载的cer文件而言,仅凭这个扩展名还无法断定文件编码类型.其实在你导出文件的时候,是有指定编码类型的,不知你是否还记得下图:
解决方案六:
看不懂。。。。。
解决方案七:
Ping_Fani07说的很详细,抓包,找到certificate,拷贝下来即可wireshark过滤ipcontains“certificate”
解决方案八:
看不懂,,还是初学者,,
解决方案九:
引用3楼Ping_Fani07的回复:

关于获取服务器证书就我所知,获取服务器证书通用的方法通常有两个,一个就是你已经提到的在浏览器自带的证书复制/导出功能,缺点只适用于可用浏览器访问的网站,对于那些只用客户端(或者手机应用)访问的网站就无能为力,因为人家的客户端或应用往往都不提供证书复制或导出功能;即使是可用浏览器访问的网站,也只适用于直接使用https协议的网站(比如Gmail),不适用于临时从http跳转到https又跳回http的情况(比如12306)。因为不管怎么说,在SSL协议的握手阶段,服务器必然会向客户端/浏览器发送自己的证书,所以我要详细说的第二种获取证书的方法就是通过抓包从网络协议数据流中获取。以利用Wireshark1.10(当然你若是有其他习惯的抓包工具也可以,只要支持SSL协议解析即可)获取account.xxx.cn的服务器证书例,方法如下:(1)使用Wireshark1.10把登录account.xxx.cn过程的HTTPS会话数据抓取下来(抓包的过程就不多说了,不会问度娘),为了后面定位数据包方便,抓包要尽量干净、完整;(2)为了防止你还是不小心抓住了其他HTTPS会话的数据,你可以在Windows的命令提示符下用nslookup命令查询account.xxx.cn的IP地址,假如是192.168.1.57;(3)使用Ctrl+F组合键打开查找对话框,By(查找类型)选择String,SearchIn(查找区域)选择Packetlist,过滤条件写Certificate,设定完毕点Find。如下图:
解决方案十:
引用8楼sinat_16606629的回复:
这样保存的证书不能用,必须一个一个保存的证书才可以打开。

8楼说得对,确实是我的疏忽。certificates是证书链,确实直接拷贝certificates得到的文件是打不开的,应该到一个个具体的certificate条目去拷贝单个证书的十六进制流,如下图:感谢8楼的指正~
解决方案十一:
更详细的描述可以参考我的这篇博文:http://blog.csdn.net/howeverpf/article/details/9926557相对来说,用图更准确,步骤描述更清晰
解决方案十二:
还要再补充一点,就是前面给的加载证书的示例代码,是从我的一个工程里面截出来的,出于一些目的,某些变量的命名有所改变,但是可能还有遗漏。比如在accept()函数调用后的第一个判断,if(nClient==-1)

应该是if(m_nConversion==-1)

如此种种,回复改起来相对麻烦,所以如果有更正,一并放在我的另一篇博文里:《》另外也在博文里补充了更多的一些内容
解决方案十三:

解决方案十四:
引用11楼Ping_Fani07的回复:

还要再补充一点,就是前面给的加载证书的示例代码,是从我的一个工程里面截出来的,出于一些目的,某些变量的命名有所改变,但是可能还有遗漏。比如在accept()函数调用后的第一个判断,if(nClient==-1)

应该是if(m_nConversion==-1)

如此种种,回复改起来相对麻烦,所以如果有更正,一并放在我的另一篇博文里:《》另外也在博文里补充了更多的一些内容

windows证书库里面的证书,openssl又该如何获取呢?
解决方案十五:

解决方案:

解决方案:

解决方案:
谢谢8楼,9楼

时间: 2024-11-03 15:56:15

openssl访问https,怎么获取证书的相关文章

JSSE访问带有未验证证书的HTTPS

js|访问 摘 要 JSSE是一个SSL和TLS的纯Java实现,通过JSSE可以很容易地编程实现对HTTPS站点的访问.但是,如果该站点的证书未经权威机构的验证,JSSE将拒绝信任该证书从而不能访问HTTPS站点.本文在简要介绍JSSE的基础上提出了两种解决该问题的方法. 引言 过去的十几年,网络上已经积累了大量的Web应用.如今,无论是整合原有的Web应用系统,还是进行新的Web开发,都要求通过编程来访问某些Web页面.传统的方法是使用Socket接口,但现在很多开发平台或工具如.NET.J

centos系统中php Curl 无法访问https ,ssl_version 是 NSS,不是openssl

首先确定php是否已经安装扩展curl和openssl,如果没有请略过... 查看phpinfo  发现curl 会发现 curl 7.19.7  libcurl/7.19.7   NSS/3.19.1 Basic ECC (而不是openssl) 因为centos 6.5(我是用的版本,其他版本没有测试)默认安装curl是用ssl的版本是NSS 所以需要对Curl进行重新编译 先去官方下载 http://curl.haxx.se/download/archeology/ 我依然下载是7.19.

PHP的curl扩展不能访问https的连接

网站支付需要和财付通进行一个对接,财付通给了一个https的接口连接 将此连接放入到PHP的页面中调用curl获取此链接的返回信息, 发现使用curl访问此https的连接有问题, 然后随便找了一个http的连接试了试是正常的 看来是curl访问https类型的连接有问题 应该是openssl有猫腻, 然后重新编译安装了一下openssl 下载地址:http://www.openssl.org/source/ openssl 编译 ./config --prefix=/usr/local/ope

解决 Chrome 访问https网站出现“您的连接不是私密的问题”

解决chrome+goagent访问https网站出现"您的连接不是私密的问题" chrome 翻墙 goagent 最近的电脑出现了问题,于是重装了系统,重装系统之后速度明显好了许多.于是习惯性的安装chrome,目前安装的 是最新版本的chrome,可是目前在国内google服务被墙,不能登陆账号进行同步,于是果断的打开了goagent,一切顺利, 能够进行书签和应用,账号的同步,一切就像原来的一样.可是习惯性的打开youtube的时候,却显示"您的连接不是私密的&quo

WebLogic12 配置https 提示网站证书有问题 点击继续浏览没反应

问题描述 WebLogic12配置https提示网站证书有问题点击继续浏览没反应用的是IE11怎么解决 解决方案 解决方案二:1.其他ie版本没问题?2.具体啥问题解决方案三:IE9,10都有这个问题打开IE访问地址,首先出现这个界面点击继续浏览最后只能关闭页面,访问不到主页.我是在WebLogic12.0版本上配置的SSL,不知道配置SSL是否需要用到OpenSSL解决方案四:引用楼主u010152179的回复: WebLogic12配置https提示网站证书有问题点击继续浏览没反应用的是IE

iOS访问https ssl和tls双向加密

文章已经移到此处:http://www.henishuo.com/ios-https-tls-ssl/ 关于https和ssl的原理,请到此处查看:http://blog.163.com/magicc_love/blog/static/185853662201321423527263/ 由于项目需求,访问服务是https的,并且使用的是ssl加密方式 下面说明使用MKNetworkit网络库实现的代码: - (void)testClientCertificate { SecIdentityRef

PHP CURL访问HTTPS使用

  https服务器post数据  代码如下   function curlPost($url, $data, $timeout = 30) {     $ssl = substr($url, 0, 8) == "https://" ? TRUE : FALSE;     $ch = curl_init();     $opt = array(             CURLOPT_URL     => $url,             CURLOPT_POST    =&g

php使用curl访问https示例分享

 curl是利用URL语法在命令行方式下工作的开源文件传输工具,下面介绍一下php使用curl访问https的示例,大家参考使用吧 为方便说明,先上代码吧   代码如下: /**   * curl POST   *   * @param   string  url   * @param   array   数据   * @param   int     请求超时时间   * @param   bool    HTTPS时是否进行严格认证   * @return  string   */   fu

ssl-tomcat6 http 能正常访问 https 报404错误

问题描述 tomcat6 http 能正常访问 https 报404错误 同url http能正常访问 https不能访问 报404错误 如:http://localhost/index.index 正常 https://localhost/index.html 为404 服务器环境:linux tomcat 6.0.36 jdk 1.6.0_37 64-Bit本机模拟配置一切正常.推断可能服务器环境存在问题,求大神指出server.xml<?xml version='1.0' encoding