网络(一):简单易懂的Https工作原理
网络(二):简单易懂的https双向认证自制安全证书和tomcat配置
网络(三):简单易懂的Android平台Okhttp/Retrofit https证书配置
1、环境
电脑环境配置%JAVA_HOME%/bin/keytool.exe(jdk下一个工具)
windwos10
tomcat 7.0
IE 11
2、何为证书
以下两张截图是浏览器查看证书的信息,它包含了各种信息。
下面将列出几个后相关缀名的证书和它的简单介绍
keystore:
jks:数字证书库。
p12:是PKCS12的缩写。同样是一个存储私钥的证书库,由.jks文件导出的,用户在PC平台安装,用于标示用户的身份。
cer:俗称数字证书,目的就是用于存储公钥证书,任何人都可以获取这个文件 。
bks:由于Android平台不识别.keystore和.jks格式的证书库文件,因此Android平台引入一种的证书库格式,BKS。
注:证书之间的转换可以用工具portecle来进行转换;在https中证书扮演者重要角色,它保证颁发机构、有效期、加密密钥、加密算法等信息。
3、要生成的证书
1)https双向认证:即客户需要对服务器端身份进行认证,服务器端也需要对客户端身份进行认证
2)为客户端和服务器生成key,然后由key导出各自的证书
下面就开始生成个key和导出对应的证书,每一个步骤出命令和执行的截图。
为服务端生成keystore
keytool -genkeypair -alias server -keyalg RSA -validity 3650 -keystore F:\server.keystore
导出服务器证书
keytool -export -alias server -file F:\server.cer -keystore F:\server.keystore
生成客户端key
keytool -genkeypair -alias client -keyalg RSA -validity 3650 -keystore F:\client.jks
导出客户端证书
keytool -export -alias client -file F:\client.cer -keystore F:\client.jks
3)证书交换
证书互换的原因:只有你中有我、我中有你,在双向认证时,我们才彼此认识,这个步骤非常重要!!!
将服务端的证书保存到 publickeys.jks中给客户端用识别服务端时用
keytool -import -v -alias server -file F:\server.cer -keystore F:\publickeys.jks
将客户端的证书保存到服务端的key中,给服务端识别客户端时用
你也可以通过list命令查看服务器的证书库,可以看到两个证书,一个是服务器证书,一个是受信任的客户端证书
至此,我们为客户端可服务端生成了密钥,以及导出各自的证书,并且为客户端的密钥和服务端的密钥导入了对方的证书(双向认证时用),接下来就要开始配置tomcat服务器了。
tomcat配置
1)首先把上述生成好的服务端密钥放到tomcat的conf目录下,并修改server.xml文件配置,配置代码如下:
//其他配置省略...
http的默认端口是80,https的默认端口是443,不这样配置会访问不到服务器。
2)修改web.xml文件配置,在最末尾添加如下配置,代码如下,让http发起得请求交给https处理。
SSL
/*
CONFIDENTIAL
这样tomcat的配置就好了,非常简单,重启服务器即可
浏览器访问https
IE浏览器
接下来就需要为PC端导入相关的证书了,由于PC浏览器中存储的密钥的正式格式为p12,所以还需要把客户端的证书jks格式转为p12,证书的转换可以使用portecle工具(具体使用的百度一下就会很对资料了);客户端需要导入两个证书,一个是存储自己密钥的key,一个是服务端为客户端提供的公钥证书,用与客户对服务端的身份进行识别,证书的导入每一个过程都有截图,导入后重启服务器即可。
1)安装客户端证书
2)安装服务端证书
最后请求服务器返回结果