双向 SSL 认证(也被称为“相互认证”,或“使用客户端证书的 TLS/SSL”)是指双方通过校验彼此提供的数字证书来进行认证,以便双方都可以确认对方的身份。
-
TLS 与 SSL
TLS 的前身是 SSL。其是一个用于在应用程序之间进行通信时保障隐私的协议。除非另有说明,本文中认为 TLS 与 SSL 是等价的。
证书(cert)
包含了提供者信息等一些额外元数据的公钥/私钥对的公钥部分。它可以被自由的提供给任何人。
私钥
一个私钥可以验证与其对应的用来对数据进行加密的证书和公钥。其决不公开提供。
证书颁发机构(CA)
一个颁发数字证书的公司。对于 SSL/TLS 证书,也有少数供应商(例如 Symantec/Versign/Thawte、Comodo、GoDaddy)的证书囊括了大多数浏览器和操作系统。它们的目的是成为一个“可信的第三方”。
证书签名请求(CSR)
用私钥生成的一个文件。一个 CSR 可以向一个 CA 发送签名请求。CA 则使用其私钥对 CSR 进行数字签名,并创建一个已签名的证书。然后浏览器可以使用 CA 提供的证书来验证新的证书是否已被 CA 批准。
X.509
用于描述证书的格式和用法的一个规范。
- SSL认证
SSL实际上就是在一个web服务器与浏览器之间建立加密链接的标准安全技术。一般来说,一个浏览器(客户端)建立一个SSL连接到一个安全的web站点,它只检查该服务器证书。该浏览器一方面依靠其本身,或者提供已经被指定为根证书的列表证书以及受信任的CAs的操作系统。
单向SSL认证(服务器->客户端)
客户端与服务器使用9个握手消息,以及通过优先建立加密通道来进行消息交换。
1.客户端发送ClientHello消息来提议SSL选项。
2.服务器通过响应ServerHello消息来选择SSL选项。
3.服务器发送Certificate消息,其中包括该服务器证书。
4.客户端通过ServerHelloDone消息,来判断其部分谈判.
5.客户端在其ClientKeyExchange消息之中发送会话密匙信息(加密服务器公匙)
6.客户端通过发送ChangeCipherSpec消息来激活所有发送的未来消息的谈判选项。
7。客户端通过发送Finished消息,让服务器检查新激活的选项。
8.客户端通过发送ChangeCipherSpec消息来激活所有发送未来消息的谈判选项。
9.服务器发送Finished消息,让客户端检查新激活的选项。
双向SSL认证(服务器<->客户端)
客户端与服务器使用12个握手消息,以及优先建立加密通道来进行消息交换:
1.客户端发送ClientHello消息来提议SSL选项。
2.服务器通过响应ServerHello消息来选择SSL选项。
3.服务器发送Certificate消息,其中包括该服务器证书。
4.客户端通过ServerHelloDone消息,来判断其部分谈判.
5.客户端在其ClientKeyExchange消息之中发送会话密匙信息(加密服务器公匙)
6.客户端通过发送ChangeCipherSpec消息来激活所有发送的未来消息的谈判选项。
7。客户端通过发送Finished消息,让服务器检查新激活的选项。
8.客户端通过发送ChangeCipherSpec消息来激活所有发送未来消息的谈判选项。
9.服务器发送Finished消息,让客户端检查新激活的选项。