1、生成服务器端keystore(java中keytool命令生成),生成过程中需要设置密码库和alias密码
keytool -genkey -alias server_keystore -keyalg RSA -keystoreserver.keystore -validity 3650
2、将生成的server.keystore复制到Tomcat的根目录下的:default/server.keystore
3、配置tomcat的server.xml,启用https协议
<Connector port="9090" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="conf/custom/server.keystore" keystorePass="123456" keystoreType="jks"/>
其中的keystoreFile为keystore的相对路径,keystorePass为生成keystore时设置的密码库密码,而非alias密码。
这样单向认证就配置好了,它不要求验证客户端信息,也就是所有客户端都可以访问到
如果是用浏览器访问的话,会提示“此网站的安全证书有问题,是否继续访问”。因为这个证书是用最简单的办法自己做的,没有经过权威CA的签署,所以一般浏览器是不承认其安全性的。
----------------------------------------------------------------------------------------------------------------------------------
如果是用代码访问的话,则还需要额外的步骤
首先用以下命令:
E:\>keytool -export -alias server_keystore -file client.cer -keystore server.keystore
输入密钥库口令:
存储在文件 <client.cer> 中的证书
注:-alias server_keystore为生成server.keystore时的alias名称
得到一个client.cer,然后把client.cer给到客户端,客户端用以下命令:
E:\>keytool -import -alias client_keystore -file client.cer -keystore client.keystore
得到client.keystore,把这个文件作为客户端代码的truststore,才能正常访问到。
public static void loadTrustStore() {
System.setProperty("javax.net.ssl.trustStore", "PATH/client.keystore"); //(truststore)
System.setProperty("javax.net.ssl.trustStorePassword", "password"); //(truststore 密码 )
System.setProperty("javax.net.ssl.trustStoreType", "JKS"); //(truststore 类型 )
}
(jks|keystore:java用的存储密钥的容器。可以同时容纳n个公钥或私钥,后缀一般是.jks或者.keystore或.truststore)
可以理解为因为是用代码来访问服务端,没有用户手工确认的过程,所以需要把证书加进来进行确认。