最近研究了下https,https需要相关证书;可以利用jdk自带的工具自己生成证书,也可以向专门机构申请证书。
区别好像就是用浏览器访问https的网站时,自己生成的证书不会被浏览器信任,在浏览器左上角地址栏“https://”有个红色的斜杠;专门机构申请的证书没有。我暂时还没发现其它的区别。
2017年后苹果强制使用https,这时证书需要到专门机构(如startssl、沃通CA等)上申请,不能自己生成,因为自己生成的证书不会被苹果信任。
下面看下如何自己生成证书。
一、为服务器生成证书
[html] view plain copy
keytool -genkey -v -alias tomcat -keyalg RSA -keystore /Users/medchitectec/Desktop/cer/tomcat.keystore -validity 36500
“tomcat”是别名
“/Users/medchitectec/Desktop/cer/tomcat.keystore ”是生成的证书的存放路径
"36500"是证书的有效期,单位是”天“
二、为客户端生成证书
[html] view plain copy
keytool -genkey -v -alias tomcat -keyalg RSA -storetype PKCS12 -keystore /Users/medchitectec/Desktop/cer/client.key.p12 -validity 36500
“tomcat”是别名,最好和服务端证书一样
“/Users/medchitectec/Desktop/cer/client.key.p12 ”是生成的证书的存放路径
"36500"是证书的有效期,单位是”天“
三、让服务器信任客户端证书
1、将客户端证书导出为CER文件
[html] view plain copy
keytool -export -alias tomcat -keystore /Users/medchitectec/Desktop/cer/client.key.p12 -storetype PKCS12 -storepass 88888 -rfc -file /Users/medchitectec/Desktop/cer/client.key.cer
tomcat”是别名
“/Users/medchitectec/Desktop/cer/client.key.p12 ”是客户端证书的存放路径
”88888“是客户端证书密码(生成证书时会提示输入)
“/Users/medchitectec/Desktop/cer/client.key.cer ”是生成的 cer文件的存放路径
2、将CER文件导入到服务器的证书库
[html] view plain copy
keytool -import -v -file /Users/medchitectec/Desktop/cer/client.key.cer -keystore /Users/medchitectec/Desktop/cer/tomcat.keystore
“/Users/medchitectec/Desktop/cer/client.key.cer ”上面一步生成的cer文件的存放路径
“ /Users/medchitectec/Desktop/cer/tomcat.keystore ”服务器证书的存放路径
3、检查安装结果
[html] view plain copy
keytool -list -keystore /Users/medchitectec/Desktop/cer/tomcat.keystore
“ /Users/medchitectec/Desktop/cer/tomcat.keystore ”服务器证书的存放路径
四、让客户端信任服务器证书
1、把服务器证书导出为CER文件
[html] view plain copy
keytool -keystore /Users/medchitectec/Desktop/cer/tomcat.keystore -export -alias tomcat -file /Users/medchitectec/Desktop/cer/tomcat.cer
五、配置Tomcat服务器
[html] view plain copy
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:\\tomcat.keystore" keystorePass="888888"
truststoreFile="D:\\tomcat.keystore" truststorePass="888888" />
clientAuth="false"表示浏览器客户端不需要“客户端证书”,可以直接访问
clientAuth="true"表示访问必须要客户端证书,在浏览器中安装上面步骤生成的“客户端证书”即可
六、tomcat同时支持http和https
上线APP还需要支持老版本,老版本是http接口,那么这个时候需要同时支持http和https,配置如下
在server.xml中:
[html] view plain copy
connectionTimeout="2000000"
redirectPort="8443"
/>
maxThreads="15000" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:\\tomcat.keystor" keystorePass="888888"
truststoreFile="D:\\tomcat.keystor" truststorePass="888888"/>
这样“8090”是http的端口,“8091”是https的接口