SSL通道搭建步骤如下:

首先生成证书:

SSL通信中证书配置:

工具keytool

服务器端:

服务端我们采用java默认的密钥库JKS类型,首先我们利用keytool工具创建一个密钥对,语句如下:

 

keytool -genkey -alias serverkey -keypass serverpass -keystore e:\serverkeystore\serverkey.jks -storepass serverpass -validity365 -keyalg RSA -keysize 1024 

 

keytool生成证书nginx可以用吗_证书

 

这个语句创建了一个密钥库serverkey.jks

创建好密钥对之后我们将用这个密钥对产生的证书导出:

 

keytool –exportcert –alias serverkey –keytore e:\serverkeystore\serverkey.jks –file e:\serverkeystore\server.crt –storepass

 

keytool生成证书nginx可以用吗_ide_02

 

这个语句从serverkey.jks中导出了一个名为serverkey.crt的证书。

 

这个证书我们将导入到客户端的受信任证书密钥库中去,同样的服务器端也需要一个受信任证书密钥库:

 

keytool –importcert –alias serverkey –keystore e:\clientkeystore\clientkey.bks –file e:\serverkeystore\server.crt –storepass clientpass –v

 

keytool生成证书nginx可以用吗_keytool_03

查看clientkey.bks

 

 

keytool生成证书nginx可以用吗_密钥对_04

 

keytool生成证书nginx可以用吗_密钥对_05

这个语句是将客户端导出来的证书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

 

keytool生成证书nginx可以用吗_keytool_06

这里注意需要加上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

 

keytool生成证书nginx可以用吗_证书_07

 

这个clentcrt的证书就是上面服务器中需要用到的证书。接着把clent.crt导入到信任密钥库中去:

 

keytool –importcert –alias clientkey –keystore e:\sercerkeystore\serverkey.jks –file e:\clientkeystore\clent.crt -storepass serverpass -v 

keytool生成证书nginx可以用吗_keytool_08

查看serverkey.jks

 

 

 

 

 

 

 

 

 

 

Keytool -list -v -keystore e:\serverkeystore\serverkey.jks -storepass serverpass

 

 

keytool生成证书nginx可以用吗_密钥对_09

 

 

keytool生成证书nginx可以用吗_ssl_10

 

(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:

 

keytool生成证书nginx可以用吗_密钥对_11

                           图4-9 SSL配置成功