HTTPS 简介
HTTPS 全称 HTTP over TLS。TLS是在传输层上层的协议,应用层的下层,作为一个安全层而存在,翻译过来一般叫做传输层安全协议。
对 HTTP 而言,安全传输层是透明不可见的,应用层仅仅当做使用普通的 Socket 一样使用 SSLSocket 。
TLS是基于 X.509 认证,他假定所有的数字证书都是由一个层次化的数字证书认证机构发出,即 CA。另外值得一提的是 TLS 是独立于 HTTP 的,任何应用层的协议都可以基于 TLS 建立安全的传输通道,如 SSH 协议。
由于对称加密比非对称加密快,https决定使用对称加密来加密数据,使用非对称加密对称加密生成的密钥,以确保安全。
重写默认的HostnameVerifier
和 SSLSocketFactory
使用SSLContext创建SSLSocketFactory,可信证书认证需自定义X509TrustManager,客户端证书认证需自定义X509KeyManager。
- 设置定制的X509TrustManager
想要信任不是系统内置的CA(证书颁发机构)颁发的证书,要通过SSLSocketFactory来设定自己的X509TrustManager。
注意,自签名证书实际上是自己的CA,并且可以通过将它们包含在KeyStore(密钥库)中来信任。
也可以直接实现X509TrustManager,通常编写一个自定义的KeyStore再传递给TrustManagerFactory来实现会更好。
- 设置定制的X509KeyManager
自定义X509KeyManager可以用来提供客户端证书及其相关的私钥来验证与服务器的连接。
X509KeyManager可使用基于KeyStore的KeyManagerFactory创建。
X509KeyManager也可以直接实现,这可以从非密钥存储源返回证书和私钥。