https实践【原创】

这次项目中又用到https,在这里记录一些实践命令,以便后续快速查找。
https的原理很简单,可以看原先转载的一篇文章《 https原理浅析》。
简单归纳:
1. 使用https通道加密需要证书密钥对,存在密钥库文件中,可以使用java生成,也可以向第三方证书机构购买。
2. 获取到密钥库keystore文件,并在tomcat等web服务器开启https,密钥库指向keystore文件。
3. 这时已经可以通过https访问了,但是如果是自己使用java生成的证书,浏览器验证提示不安全。服务端可以使用keytool从密钥库导出证书(公钥),浏览器导入证书,就能信任安全了。
4. 如果是java访问,根据https的通讯机制,也是需要验证服务器证书的。这时有两种做法,一种是将服务器导出的证书(公钥)导入到客户端jdk中, 这时客户端也能验证通过。另外一种是重写校验方法,绕过证书验证。两种做法各有利弊,第一种比较安全,防止伪冒;第二种比较方便,特别是生产上部署很多节点的时候,每个节点导入会比较麻烦。(当然如果购买比较大的第三方机构的证书,jdk中已经灌入根证书,就不需要这么麻烦了)。
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
	                 //信任所有,绕过认证
	                 public boolean isTrusted(X509Certificate[] chain,
	                                 String authType) throws CertificateException {
	                     return true;
	                 }
	             }).build();

以下记录命令:
1. 生成密钥对
keytool -genkey -v -alias openapi -keyalg RSA -keystore D:\work\data\key\openapi.keystore -validity 36500
2. 导出证书
keytool -keystore D:\work\data\key\openapi.keystore -export -alias tomcat -file D:\home\openapi.cer
3. java客户端导入证书
keytool -import -alias openapi -keystore %java_home%/jre/lib/security/cacerts -file D:\home\openapi.cer -trustcacerts
4. tomcat开启https
<Connector port="8443" maxHttpHeaderSize="8192" protocol="org.apache.coyote.http11.Http11Protocol"
    	         SSLEnabled="true" 
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" 
               keystoreFile="/usr/local/cert/openapi.keystore" keystorePass="mypassword"/>

猜你喜欢

转载自zhenggm.iteye.com/blog/2343876