主页

索引

模块索引

搜索页面

临时

密钥交换算法有 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 握手协议:

@startuml

autonumber
participant 客户端 as c
participant 服务端 as s

c -> s: ClientHello
note over c
可用的版本号
当前时间
客户端随机数
会话 id
可用的密码套件清单
可用的压缩方式清单
end note

c <- s: ServerHello
note over s
使用的版本号
当前时间
服务器随机数
会话 id
使用的密码套件
使用的压缩方式
end note
c <- s: Certificate
note over s
证书清单
end note

c <- s: ServerKeyExchange
note over s
1. RSA:
    公钥密码参数
        N: modulus
        E: exponent
    散列值
2. Diffie-Hellman 密码交换
    密码交换参数
        P: prime modulus
        G: generator
    散列值
end note

c <- s: CertificateRequest
note over s
证书类型清单
认证机构名称清单
end note

c <- s: ServerHelloDone

c -> s: Certificate
note over c
证书清单
end note

c -> s: ClientKeyExchange
note over c
1. RSA:
    经过加密的预备主密码
2. Diffie-Hellman 密钥交换
    客户端的 Y(即:G^x mod P)
end note

c -> s: CertificateVerify
note over c
数字签名
end note

c -> s: ChangeCipherSpec

c -> s: Finished

c <- s: ChangeCipherSpec

c <- s: Finished

@enduml

国密

国密证书:

这里的国密证书指的是使用国密算法(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 系列

密钥有两种类型:用于签名和用于加解密,对应称为 签名密钥对 和 加密密钥对

参考

主页

索引

模块索引

搜索页面