Https保证的是信道的安全,即客户端和服务端通信报文的安全。但是无法保证中间人攻击,所以双向认证解决的问题就是防止中间人攻击。
中间人攻击(Man-in-the-MiddleAttack)简称(MITM),是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为“中间人”。若没有开启双向认证,中间人可以拦截客户端发送的请求,然后篡改信息再发送到服务端;中间人也可以拦截服务端返回的信息,再发送到客户端。所以使用Https的单向认证或双向认证能够有效防止中间人攻击。
注:无论Ca证书还是自签证书都需要双向认证。
双向认证原理1、服务端认证客户端原理
客户端有自己的bks证书auth_client.bks,并将导出的auth_client_pub.cer证书导入到服务端证书auth_server.keystore中,这样服务端就将客户端证书添加到信任列表中,从而能够让带有该auth_client_pub.cer证书信息的客户端访问服务。
2、客户端认证服务端原理
服务端有自己的证书(ca颁发的或者是自己创建的)auth_server.keystore,并导出auth_server_pub.cer证书,将该证书导入到客户端证书
auth_truststore.jks中,注意:这里不是导入到auth_client.jks中,而是导入生成另一个证书auth_truststore.jks,最后再将jks证书转化成bks证书。
实现过程一、服务端证书
创建服务端证书
keytool-genkeypair-aliasauth_server-keyalgRSA-validity-keypassauth_server-storepassauth_server-keystore/Users/renzhongrui/android/certs/auth_server.keystore
导出服务端证书公钥
keytool-export-aliasauth_server-file/Users/renzhongrui/android/certs/auth_server_pub.cer-keystore/Users/renzhongrui/android/certs/auth_server.keystore-storepassauth_server
二、客户端证书
创建客户端证书(andoird不能用keystore格式的密钥库,所以先生成jks格式,再用Portecle工具转成bks格式)
keytool-genkeypair-aliasauth_client-keyalgRSA-validity-keypassauth_client-storepassauth_client-keystore/Users/renzhongrui/android/certs/auth_client.jks
导出客户端证书公钥
keytool-export-aliasauth_client-file/Users/renzhongrui/android/certs/auth_client_pub.cer-keystore/Users/renzhongrui/android/certs/auth_client.jks-storepassauth_client
三、证书交换
将客户端证书导入服务端keystore中,再将服务端证书导入客户端auth_truststore中,一个keystore可以导入多个证书,生成证书列表。
将客户端公钥导入到服务端keystore证书中,使得服务端能够信任客户端。
keytool-import-v-aliasauth_client-file/Users/renzhongrui/android/certs/auth_client_pub.cer-keystore/Users/renzhongrui/android/certs/auth_server.keystore-storepassauth_server
生成客户端信任证书库auth_truststore.jks,即将服务端公钥导入到客户端jks证书中,使得客户端能够信任服务端。
keytool-import-v-aliasauth_server-file/Users/renzhongrui/android/certs/auth_server_pub.cer-keystore/Users/renzhongrui/android/certs/auth_truststore.jks-storepassauth_truststore
最后验证一下,查看证书库中的所有证书
keytool-list-keystore/Users/renzhongrui/android/certs/auth_server.keystore-storepassauth_server
keytool-list-keystore/Users/renzhongrui/android/certs/auth_truststore.jks-storepassauth_truststore
四、证书转换
下载portecle.jar(