SSL通道搭建步骤如下:
首先生成证书:
SSL通信中证书配置:
工具keytool
服务器端:
服务端我们采用java默认的密钥库JKS类型,首先我们利用keytool工具创建一个密钥对,语句如下:
keytool -genkey -alias serverkey -keypass serverpass -keystore e:\serverkeystore\serverkey.jks -storepass serverpass -validity365 -keyalg RSA -keysize 1024
这个语句创建了一个密钥库serverkey.jks
创建好密钥对之后我们将用这个密钥对产生的证书导出:
keytool –exportcert –alias serverkey –keytore e:\serverkeystore\serverkey.jks –file e:\serverkeystore\server.crt –storepass
这个语句从serverkey.jks中导出了一个名为serverkey.crt的证书。
这个证书我们将导入到客户端的受信任证书密钥库中去,同样的服务器端也需要一个受信任证书密钥库:
keytool –importcert –alias serverkey –keystore e:\clientkeystore\clientkey.bks –file e:\serverkeystore\server.crt –storepass clientpass –v
查看clientkey.bks
这个语句是将客户端导出来的证书server.crt导入到clientkey.bks中去。
客户端:
客户端也类似,不过由于客户端是android只支持BKS类型的密钥库,而java本身不支持BKS类型密钥库,所以我们需要手动的加上这个库,使java的keytool能够使用BKS:
将这个bcprov-jdk16-145.jar包放在%JAVA_HOME%的jre/lib/etx文件夹下,然后在%JAVA_HOME%的jre/lib/security/java.security 文件中的列表中添加一条
security.provider.??=org.bouncycastle.jce.provider.BouncyCastleProvider
??表示序号,就跟在原列表的后面就行。配置好以后,就可以使用keytool来生成BKS类型的密钥库了
开始写客户端:类似的我们先创建一个密钥对
keytool -genkey -alias clientkey -keypass clientpass -keyalg RSA -keysize 1024 -validity 365 -keystore e:\clientkeystore\clientkey.bks -storepass clientpass -dname "cn=client, ou=whu, o=whu, c=CN, l=wuhan" -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
这里注意需要加上storetype和provider类型,provider就是上面配置时添加的内容。
这个语句创建了一个名为clientkey.bks 里面包含了一个的密钥对,接下来导出这个密钥对生成的证书:
keytool –exportcert –alias clientkey –keytore e:\clientkeystore\clientkey.bks –file e:\clientkeystore\clent.crt -storepass clientpass -v -storetype BKS -providerorg.bouncycastle.jce.provider.BouncyCastleProvider
这个clentcrt的证书就是上面服务器中需要用到的证书。接着把clent.crt导入到信任密钥库中去:
keytool –importcert –alias clientkey –keystore e:\sercerkeystore\serverkey.jks –file e:\clientkeystore\clent.crt -storepass serverpass -v
查看serverkey.jks
Keytool -list -v -keystore e:\serverkeystore\serverkey.jks -storepass serverpass
(2)最后一步就是配置Tomcat。修改tomcat server.xml 文件的配置如下:
<Connector
protocol="org.apache.coyote.http11.Http11Protocol" port="8443" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" keystoreFile="E:\serverkey.jks" keystorePass="serverpass"
clientAuth="false" sslprotocol="TLS"
/>
在浏览器中输入https://localhost:8443成功页面如图4-9:
图4-9 SSL配置成功