使用openssl实现 https (TLS 和OpenSSL关系) + 浏览器https校验

18 篇文章 0 订阅
12 篇文章 0 订阅

openssl TLS的关系

TLS(Transport Layer Security,安全传输层),TLS是建立在传输层TCP协议之上的协议,服务于应用层,它的前身是SSL(Secure Socket Layer,安全套接字层),它实现了将应用层的报文进行加密后再交由TCP进行传输的功能。

在SSL更新到3.0时,IETF对SSL3.0进行了标准化,并添加了少数机制(但是几乎和SSL3.0无差异),标准化后的IETF更名为TLS1.0(Transport Layer Security 安全传输层协议),可以说TLS就是SSL的新版本3.1,并同时发布“RFC2246-TLS加密协议详解”
 

1.0.0h的Openssl版本支持SSLv2,SSLv3和 TLSv1.0

从Openssl 1.0.1开始,添加了对TLSv1.1和TLSv1.2的支持

从Openssl 1.1.1开始支持TLS1.3

 

mac下的opessl默认是0.9,更新方式如下:

http://www.liuchungui.com/blog/2016/05/10/mac10-dot-11sheng-ji-an-zhuang-openssl/

 

生成公私钥(证书)

https://openhome.alipay.com/doc/docIndex.htm?url=https://openhome.alipay.com/doc/viewKbDoc.htm?key=236615_428849&type=info

注意 PKCS8格式私钥  是给java服务端用的,C++客户端使用RSA格式

 

PEM格式证书

 

PEM – Openssl使用 PEM(Privacy Enhanced Mail)格式来存放各种信息,它是 openssl 默认采用的信息存放方式。Openssl 中的 PEM 文件一般包含如下信息:

内容类型:表明本文件存放的是什么信息内容,它的形式为“——-BEGIN XXXX ——”,与结尾的“——END XXXX——”对应。

使用PEM格式存储的证书
—–BEGIN CERTIFICATE—–
MIICJjCCAdCgAwIBAgIBITANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCVVMx
………
1p8h5vkHVbMu1frD1UgGnPlOO/K7Ig/KrsU=
—–END CERTIFICATE—–
使用PEM格式存储的私钥
—–BEGIN RSA PRIVATE KEY—–
MIICJjCCAdCgAwIBAgIBITANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCVVMx
………
1p8h5vkHVbMu1frD1UgGnPlOO/K7Ig/KrsU=
—–END RSA PRIVATE KEY—–
使用PEM格式存储的证书请求文件
—–BEGIN CERTIFICATE REQUEST—–
MIICJjCCAdCgAwIBAgIBITANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCVVMx
………
1p8h5vkHVbMu1frD1UgGnPlOO/K7Ig/KrsU=
—–END CERTIFICATE REQUEST—–

 

 

 

DER – 辨别编码规则 (DER) 可包含所有私钥、公钥和证书。它是大多数浏览器的缺省格式,并按 ASN1 DER 格式存储。它是无报头的 - PEM 是用文本报头包围的 DER。

CER  - 一般指使用DER格式的证书

编码格式转换

真正需要转换的是.pem.der这两种证书文件,因为他们使用不同的编码方式

 

证书链

从https网站下载证书时,如果是3级证书链,则证书验证的时候,也需要有父证书,否则证书验证不过

Poco::Net::initializeSSL();
    CString cstrRootCer = pahy::GetResourceDirectory()+_T("\\conf\\certificates\\rootcert.pem"); //所有
    CString cstrTestCer = pahy::GetResourceDirectory()+_T("\\conf\\certificates\\Test.cer");            
    string strRootCer = TOOL_STRING::UnicodeToUTF8((LPCTSTR)cstrRootCer);
    string strTestCer = TOOL_STRING::UnicodeToUTF8((LPCTSTR)cstrTestCer);
    SharedPtr<InvalidCertificateHandler> ptrCert = new ConsoleCertificateHandler(false); 
    Context::Ptr ptrContext = new Context(Context::TLSV1_2_CLIENT_USE, "", strTestCer, strRootCer, Context::VERIFY_RELAXED, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
    SSLManager::instance().initializeClient(0, ptrCert, ptrContext);

 

浏览器证书验证

https://www.cnblogs.com/xiohao/p/9032481.html

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值