HTTPS 的诞生

明文传输

明文传输-来源于网络

对称加密

对称加密-来源于网络

“加密” 和 “解密” 使用【相同的】密钥,如果密钥可以安全的传输,那么消息也应该可以安全的传输。

非对称加密

非对称加密-来源于网络

上述非对称加密与对称加密效果基本一样,如果公钥可以安全的传输,那么消息也应该可以安全的传输,接下来看看被劫持的情况。

被劫持-来源于网络

窃听者可以伪造服务器的公钥与客户端通讯,客户端以为是跟服务器通讯,其实是与窃听者在通讯。

无论是对称加密还是非对称加密,都遗留了一个问题没有解决,那就是如何证明我们访问的网站就是我们要访问的网站,而不是他人伪造的,即中间人攻击和信息抵赖的问题,这里就用到了 CA 证书。

CA 认证

CA 认证,即电子认证服务 ,是指为电子签名相关各方提供真实性、可靠性验证的活动。

证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。

CA 中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公开密钥。CA 机构的数字签名使得攻击者不能伪造和篡改证书。在 SET 交易中,CA 不仅对持卡人、商户发放证书,还要对获款的银行、网关发放证书。

CA 是证书的签发机构,是 PKI 的核心。CA 是负责签发证书、认证证书、管理已颁发证书的机关。它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。

浏览器并不需要预置所有的 CA 证书,而只需要预置最顶层 CA 的证书(通常称作根证书)即可,而全球顶层 CA 中心数量有限,大概十来个,所以不会存在存储上的问题。当然,如果我们去查看系统预置的根证书,发现数量好像远远不止,那是因为为了程序处理的方便,我们也可能预置一些二级 CA 证书。比如中国的 CA 中心在全球可能只是二级 CA 中心,而我们经常会验证中国 CA 中心颁发的证书,这个时候预置这些二级 CA 证书,可以避免证书验证时验证链过长,提高效率。

360安全浏览器预置的根证书

申请并配置域名 SSL 证书流程

openssl req -new -SHA256 -newkey rsa:2048 -nodes -keyout myssl.com.key -out myssl.com.csr -subj "/C=CN/ST=henan/L=zhengzhou/O=/OU=/CN=myssl.com"
openssl req -in myssl.com.csr -noout -text
Certificate Request:
    Data:
        Version: 1 (0x0)
        Subject: C = CN, ST = henan, L = zhengzhou, CN = myssl.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:bd:95:a6:dc:77:2f:4b:28:89:bc:47:cc:a4:40:
                    5e:a9:05:12:18:7b:a7:e5:10:07:9e:55:53:43:05:
                    96:bb:a5:f7:0a:9a:a5:64:c8:38:66:7d:0f:f1:67:
                    cc:2e:c1:01:20:92:c9:8c:6c:29:3f:50:bf:03:95:
                    ee:49:fa:ae:89:ac:74:eb:fd:f7:b3:6b:9a:f4:ae:
                    c3:75:ff:02:6d:15:39:5c:6e:1c:3c:ea:96:0c:5d:
                    e9:02:88:3e:5a:eb:37:94:40:e6:a1:ea:65:ce:b8:
                    2a:89:33:f7:b0:2f:5b:24:2d:7f:a5:d5:fb:c7:c6:
                    ae:5e:55:70:84:df:85:8d:a5:ad:f1:c6:3b:44:8d:
                    49:80:81:9d:23:e7:5a:b4:4c:88:71:3c:3a:59:c9:
                    c1:ad:46:2c:59:fa:c6:60:b0:d9:bd:d3:76:b3:95:
                    6c:36:ac:02:d8:bd:ef:8f:db:12:e3:f7:ef:d1:d4:
                    b4:61:75:9c:f6:75:20:f7:a4:a6:b5:64:2f:a0:b0:
                    bb:31:af:2e:2b:0c:0d:4a:e4:57:65:95:6c:06:7c:
                    cd:b2:0a:04:fc:7d:26:f7:3e:9e:dc:53:09:77:5e:
                    b3:29:f2:df:0b:3e:79:10:70:7f:66:c9:bf:76:4c:
                    85:14:7d:a1:28:ae:6b:8a:2b:7d:04:55:55:ae:b7:
                    87:87
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha256WithRSAEncryption
         69:e1:ce:73:a1:c9:44:7a:bd:8d:d7:a1:8c:a7:50:88:1f:94:
         be:67:8f:02:4d:4f:01:09:19:73:33:c0:1d:a6:95:db:ed:41:
         07:9c:a4:6f:1d:00:f3:b5:4a:68:75:59:77:c8:90:49:6e:e2:
         84:d3:7e:89:b1:53:aa:4d:8d:39:88:ab:bc:21:cb:66:9a:5c:
         b7:c6:23:7c:c6:83:94:2f:f7:3d:c8:93:a8:5d:d8:bc:64:90:
         df:e7:ab:00:03:30:26:22:4f:d0:1f:dd:d6:b0:10:50:c3:d9:
         88:61:9d:66:87:fc:fd:62:59:f6:31:af:bd:be:6d:49:bc:a5:
         e9:9e:f0:77:78:da:e3:bd:d1:b9:43:71:c7:a3:ef:93:90:dd:
         0b:51:f2:c9:45:fc:66:2d:a6:c2:db:92:7b:5b:36:5f:d4:bc:
         a6:d3:56:00:af:54:44:ba:6e:9a:0d:5d:ec:cd:36:21:7a:08:
         77:5f:c5:65:fc:1b:fc:d4:e5:68:0f:5a:4e:64:1a:3e:dc:47:
         e4:9f:a7:fe:a5:b8:4d:6a:19:91:bd:04:cf:54:cf:cb:31:df:
         29:d1:4f:e7:b0:87:04:7c:84:8b:56:ee:d8:28:8f:27:ce:7e:
         3b:38:13:9b:98:25:9e:5b:34:ed:4f:f4:5d:d6:6b:f4:6d:86:
         4f:01:8e:f7
req -in myssl.com.csr -noout -verify -key myssl.com.key
verify OK
keytool -genkey -alias myssl.com -sigalg SHA256withRSA -keyalg RSA -keysize 2048 -keystore myssl.com.jks -dname "C=CN,ST=henan,L=zhengzhou,O=,OU=,CN=myssl.com" && keytool -certreq -alias myssl.com -file myssl.com.csr -keystore myssl.com.jks && echo Your certificate signing request file is myssl.com.csr.  Your keystore file is myssl.com.jks

https://myssl.com/csr_create.html

建议商业用户使用离线工具生成和处理私钥,如 OpenSSL、KeyManager 本地加密存储。

明白以上概念及流程,接下来理解 PKI 就相对容易了。

PKI 体系

PKI 是 Public Key Infrastructure 的缩写,其主要功能是绑定证书持有者的身份和相关的密钥对(通过为公钥及相关的用户身份信息签发数字证书),为用户提供方便的证书申请、证书作废、证书获取、证书状态查询的途径,并利用数字证书及相关的各种服务(证书发布,黑名单发布,时间戳服务等)实现通信中各实体的身份认证、完整性、抗抵赖性和保密性。

更简单点讲就是基于公钥算法和技术,为网上通信提供安全服务的基础设施。

身份验证:确保另一方是你要与之通信的合法服务器或者个人。

信息加密:确保没有其他方可以阅读你的通信甚至篡改你的通信。

为了规范化运用 PKI 技术,出现了很多标准,HTTPS 中最常用的标准就是 X.509 标准。X.509 标准来自国际电信联盟电信标准(ITU-T)的 X.500 标准,1995 年国际互联网工程任务组(IETF)的 PKIX 小组成立,用来建设互联网的 PKI 公钥基础设施标准,建立的标准就是 X.509。

X.509标准PKI基本组成

国密算法

类别 分组密码算法 公钥密码算法 摘要算法
国际 DES/3DES/IDEA RSA/ECC CRC32/MD5/SHA-1/SHA-256
国密 SM4 SM2 SM3

分组密码算法 (对称算法)

公钥密码算法(非对称算法)

杂凑算法

SM7 对称密码算法

SM9 标识密码算法

ZUC 祖冲之算法

主流 CA 机构

国际 CA

国内 CA

国密 SSL 改造

国密浏览器

密信浏览器

双 SSL 证书

密信浏览器支持“SM2/RSA双证书”部署模式

域名 SSL 证书

域名 SSL 证书分类

HTTPS 性能

HTTPS 性能优化方法

自动化测试 HTTPS 网站

SSL Server Test

https://www.ssllabs.com/ssltest/

Summary

Certificate

SSL Client Test

https://clienttest.ssllabs.com:8443/ssltest/viewMyClient.html

SSL Client Test

https://browserleaks.com/ssl

密信浏览器

360极速浏览器

参考文档

《深入浅出 HTTPS:从原理到实战》

https://www.cnblogs.com/precedeforetime/p/13390761.html

https://blog.csdn.net/freekiteyu/article/details/76423436

https://github.com/ywdblog/httpsbook


↙↙↙阅读原文可查看相关链接,并与作者交流