一、生成密钥库和证书
可参考以下密钥生成脚本,根据实际情况做必要的修改,其中需要注意的是:服务端的密钥库参数“CN”必须与服务端的IP地址相同,否则会报错,客户端的任意。

1、生成服务器证书库

keytool -validity 365 -genkey -v -alias server -keyalg RSA -keystore E:\ssl\server.keystore -dname "CN=127.0.0.1,OU=icesoft,O=icesoft,L=Haidian,ST=Beijing,c=cn" -storepass 123456 -keypass 123456


2、生成客户端证书库

keytool -validity 365 -genkeypair -v -alias client -keyalg RSA -storetype PKCS12 -keystore E:\ssl\client.p12 -dname "CN=client,OU=icesoft,O=icesoft,L=Haidian,ST=Beijing,c=cn" -storepass 123456 -keypass 123456


3、从客户端证书库中导出客户端证书

keytool -export -v -alias client -keystore E:\ssl\client.p12 -storetype PKCS12 -storepass 123456 -rfc -file E:\ssl\client.cer


4、从服务器证书库中导出服务器证书

keytool -export -v -alias server -keystore E:\ssl\server.keystore -storepass 123456 -rfc -file E:\ssl\server.cer


5、生成客户端信任证书库(由服务端证书生成的证书库)

keytool -import -v -alias server -file E:\ssl\server.cer -keystore E:\ssl\client.truststore -storepass 123456


6、将客户端证书导入到服务器证书库(使得服务器信任客户端证书)

keytool -import -v -alias client -file E:\ssl\client.cer -keystore E:\ssl\server.keystore -storepass 123456


7、查看证书库中的全部证书

keytool -list -keystore E:\ssl\server.keystore -storepass 123456

二、Tomat配置
使用文本编辑器编辑${catalina.base}/conf/server.xml
找到Connector port="8443"的标签,取消注释,并修改成如下:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="true" sslProtocol="TLS"
               keystoreFile="${catalina.base}/key/server.keystore" keystorePass="123456"
               truststoreFile="${catalina.base}/key/server.keystore" truststorePass="123456"/>
                  # truststoreFile、keystoreFile为已经生成的服务器证书的地址  
                  # truststorePass、keystorePass为自定义的服务器证书的密码 

备注:
keystoreFile:指定服务器密钥库,可以配置成绝对路径,如“D:/key/server.keystore”,本例中是在Tomcat目录中创建了一个名称为key的文件夹,仅供参考。
keystorePass:密钥库生成时的密码
truststoreFile:受信任密钥库,和密钥库相同即可

truststorePass:受信任密钥库密码

最新文章

  1. MVVM大比拼之knockout.js源码精析
  2. 1.openGL 初探
  3. Dev用于界面按选中列进行分组统计数据源(实用技巧)
  4. CodeForces 450B 矩阵
  5. ListView为什么用setOnItemClick这个方法和onTouch这个方法有冲突
  6. Pritunl:简易搭建个人VPN及年费200的超编译独立主机 BandwagonHost
  7. Andoid实现手动绘图
  8. 用JSmooth制作java jar文件的可运行exe文件教程【图文】
  9. webservice发送字符串
  10. 多线程下HashMap的死循环是如何产生的
  11. plsql使用
  12. android手机旋转方向识别
  13. 并发编程(CountDownLatch使用)
  14. SQL JOIN语法,以及JOIN where 和and区别,还有where和join效率问题。
  15. Javascript模式小记(一)
  16. SQL Server 中用DBCC Opentran语句查看未关闭的事务(转载)
  17. 使用EF操作不同数据库(以SQLite为例)
  18. 【CH4201】楼兰图腾
  19. jQuery全屏滚动插件fullPage.js中文帮助文档API
  20. jquery购物车添加功能

热门文章

  1. Hadoop的学习前奏(二)——Hadoop集群的配置
  2. 在GNU Linux中怎样得到一个进程当前的流量
  3. 苹果官方Instruments工具之Automation的介绍
  4. java-javabean Introspector的应用
  5. centos上装eclipse步骤
  6. python 循环高级用法 [expression for x in X [if condition] for y in Y [if condition] ... for n in N [if condition] ]按照从左至右的顺序,分别是外层循环到内层循环
  7. windows 下 opencv 3.x 的安装及常见问题的解决
  8. JAVA基础(多线程Thread和Runnable的使用区别(转载)
  9. [Swift通天遁地]四、网络和线程-(2)通过BlockOperation实现线程的队列
  10. celery定时执行ansible api返回为空的问题