问题描述
比如访问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