如何通过HTTPS(SSL加密)方式访问web service (java环境)

1. 生成证书
这里用到的文件,我们存放在D:/SSL/文件夹内,其中D:/SSL/server/内的文件是要交给服务器用的,D:/SSL/client/内的文件是要交给客户端用的。

      1.1生成服务端证书

 

dos状态下执行命令:
keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:/SSL/server/tomcat.keystore -dname "CN=127.0.0.1,OU=pde,O=pde,L=Peking,ST=Peking,C=CN" -validity 3650 -storepass pdepde -keypass pdepde


说明:

keytool 是JDK提供的证书生成工具,所有参数的用法参见keytool –help
-genkey创建新证书
-v详细信息
-alias tomcat 以”tomcat”作为该证书的别名。这里可以根据需要修改
-keyalg RSA 指定算法
-keystore D:/SSL/server/tomcat.keystore 保存路径及文件名
-dname "CN=127.0.0.1,OU=pde,O=pde,L=Peking,ST=Peking,C=CN" 证书发行者身份,这里的CN要与发布后的访问域名一致。但由于我们是自己发行的证书,如果在浏览器访问,仍然会有警告提示
-validity 3650证书有效期,单位为天
-storepass pdepde 证书的存取密码
-keypass pdepde 证书的私钥

 

1.2 生成客户端证书
执行命令:
keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore D:/SSL/client/client.p12 -dname "CN=client,OU=pde,O=pde,L=bj,ST=bj,C=CN" -validity 3650 -storepass client -keypass client
说明:
参数说明同上。这里的-dname证书发行者身份可以和前面不同

 

1.3 导出客户端证书
执行命令:
keytool -export -alias client -keystore D:/SSL/client/client.p12 -storetype PKCS12  -storepass client -rfc -file D:/SSL/client/client.cer
说明:


-export执行导出


-file导出文件的文件路径

 

1.4 把客户端证书加入服务端证书信任列表
执行命令:
keytool  -import -alias client -v  -file D:/SSL/client/client.cer  -keystore D:/SSL/server/tomcat.keystore -storepass pdepde
说明:
参数说明同前。这里提供的密码是服务端证书的密码。
1.5 导出服务端证书
执行命令:
keytool -export -alias tomcat -keystore D:/SSL/server/tomcat.keystore -storepass pdepde -rfc -file D:/SSL/server/tomcat.cer
说明:
把服务端证书导出。这里提供的密码也是服务端证书的密码。
1.6 生成客户端信任列表
执行命令:
keytool -import -file D:/SSL/server/tomcat.cer -storepass pdepde -keystore D:/SSL/client/client.truststore -alias tomcat  -noprompt
说明:
让客户端信任服务端证书

 

2. 配置服务端参数


2.1 配置Tomcat 目录下的/conf/server.xml
   <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
   maxThreads="150" scheme="https" secure="true" clientAuth="true"
  sslProtocol="TLS" keystoreFile="D:/SSL/server/tomcat.keystore"
keystorePass="pdepde" truststoreFile="D:/SSL/server/tomcat.keystore"
truststorePass="pdepde" />
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="D:/SSL/server/tomcat.keystore" keystorePass="pdepde" truststoreFile="D:/SSL/server/tomcat.keystore" truststorePass="pdepde" />
这里的参数clientAuth决定了是否执行强制客户端证书验证,true-只允许持有证书的客户端执行https连接
2.2 配置服务端项目web.xml
增加:
      <security-constraint>
           <web-resource-collection>
                <web-resource-name>services</web-resource-name>
                <url-pattern>/services/*</url-pattern>
                </web-resource-collection>
                <user-data-constraint>
                       <transport-guarantee>CONFIDENTIAL</transport-guarantee>
                </user-data-constraint>
       </security-constraint>
这里的"<url-pattern>/services/*</url-pattern>"指定了必须采用https的链接,当访问这些路径时,http协议的访问将被转发至https协议。这里需要根据服务端项目中web service的访问地址来配置
3. 修改客户端代码
在执行访问之前,增加:
System.setProperty("javax.net.ssl.trustStore", "D:/SSL/client/client.truststore");
System.setProperty("javax.net.ssl.trustStorePassword","pdepde");
System.setProperty("javax.net.ssl.keyStoreType","PKCS12") ;
System.setProperty("javax.net.ssl.keyStore","D:/SSL/client/client.p12") ;
System.setProperty("javax.net.ssl.keyStorePassword","client") ;
String endPoint="https://127.0.0.1:8443/easbCut/services/ApplyFormService";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值