临时¶
密钥交换算法有 RSA 和 ECDHE:RSA 历史悠久,支持度好,但不支持 PFS(Perfect Forward Secrecy);而 ECDHE 是使用了 ECC(椭圆曲线)的 DH(Diffie-Hellman)算法,计算速度快,支持 PFS
ALPN, server did not agree to a protocol
ALPN, server agreed to some http protocol; TLS informed
ALPN, server agreed to some http protocol; TLS ok.
$> curl -v https://http2.golang.org
ALPN, server accepted to use h2
tls 协议的实现有多种,如:
openssl, gnutls, nss, libressl, cyassl, polarssl, botan
openssl 的代码算是其中最混乱的,但是也是最久经考验的。
请参见此打脸文: http://blog.csdn.net/dog250/article/details/24552307
个人觉得 polarssl 和 botan 的架构最清晰,代码风格清新可爱,便于学习理解协议
但是不建议在生产环境下用,例如 polarssl 功能尚有欠缺
SSL/TLS 握手协议:
国密¶
国密证书:
这里的国密证书指的是使用国密算法(SM2-with-SM3)的标准 X509 格式证书,
证书使用 SM3 作为哈希算法,使用 SM2 作为数字签名算法
国密 SSL:
采用国密算法,符合国密标准的安全传输协议,也就是 SSL/TLS 协议的国密版本
数字证书¶
数字证书就是像一个证书一样,证明信息和合法性。由证书认证机构(Certification Authority,CA)来签发,权威的 CA 包括 verisign 等。 数字证书内容可能包括版本、序列号、签名算法类型、签发者信息、有效期、被签发人、签发的公开密钥、CA 数字签名、其它信息等等,一般使用最广泛的标准为 ITU 和 ISO 联合制定的 X.509 规范。
PKI 体系¶
公钥则可以通过证书机制来进行保护,如何管理和分发证书则可以通过 PKI(Public Key Infrastructure)来保障。 PKI 至少包括如下组件: * CA(Certification Authority):负责证书的颁发和作废,接收来自 RA 的请求,是最核心的部分; * RA(Registration Authority):对用户身份进行验证,校验数据合法性,负责登记,审核过了就发给 CA; * 证书数据库:存放证书,一般采用 LDAP 目录服务,标准格式采用 X.500 系列
密钥有两种类型:用于签名和用于加解密,对应称为 签名密钥对 和 加密密钥对