使用Openssl为Tomcat配置SSL(双向认证)

来源:互联网 发布:淘宝客云建站 编辑:程序博客网 时间:2024/05/16 15:23

转载请注明出处:http://blog.csdn.net/sunyujia/

其实我手头上有许多正规ca颁发的证书不过都是过期的,每次使用都需要调整系统日期,不方便,所以就想自己做一套以备平时测试使用。

本文只介绍如何配置,至于理论性的东西请读者自行 百度或者google 网上很多

配置步骤:

1.安装检查openssl环境

安装openssl的方法见http://blog.csdn.net/sunyujia/archive/2008/10/03/3014667.aspx

安装完成后将openssl/bin添加到环境变量path中,该目录下正常有4个文件

openssl.exe,ssleay32.dll,libeay32.dll,openssl.cnf

注意:cnf扩展名会被操作系统当成快捷方式,看不到扩展名,在dos下使用dir就可以看到。

进入cmd后输入openssl可能会提示

WARNING: can't open config file: /usr/local/ssl/openssl.cnf

提示找不到openssl.cnf ,没有关系在输入openssl命令前添加环境变量OPENSSL_CONF即可。

set OPENSSL_CONF=openssl.cnf

本教程使用openssl.cnf默认配置即可无需修改。

2.在openssl安装目录(bin目录的上一级目录,有openssl.cnf文件的目录即可)新建如下批处理脚本

在贴脚本前我先说明下脚本实现主要功能:

建立CA证书

签发Server端证书

签发Client端证书

用keytool生成tomcat使用的jks文件

此批处理文件较长,我已检查多次如果错误请读者指正,谢谢!

  1. @echo off
  2. echo.
  3. echo.
    echo 单向SSL验证 TOMCAT_HOME/conf/server.xml文件配置示例
    echo.
  4. echo My Blog:ht^tp://blog.csdn.net/sunyujia/
  5. echo.
  6. set OPENSSL_CONF=openssl.cnf 
  7. echo.
  8. echo 制作根证书
  9. echo 1.创建根证私钥
  10. if not exist root-key.key (
  11.     echo 创建一个不加密的PEM格式的私钥root-key.key
  12.     rem genrsa 用于生成一个 RSA 私钥 
  13.     rem 1024是私钥的长度,默认是 512 ,最大是 1024
  14.     openssl genrsa -out root-key.key 1024
  15. else (
  16.     echo 私钥root-key.key已经存在
  17. )
  18. echo 2.创建根证书请求文件
  19. if not exist root-req.csr (
  20.     echo 使用root-key.key私钥 创建一个根证书请求文件root-req.csr
  21.     rem -new 产生一个新的CSR, 它会要用户输入创建CSR的一些必须的信息.
  22.     rem 至于需要哪些信息,是在config文件里面定义好了的.
  23.     rem -key 指明我们的私有密钥文件名.允许该文件的格式是PKCS#8
  24.     rem 如果-key没有被set, 那么就将根据config文件里的信息先产生一对新的RSA密钥 
  25.     rem -keyform 指定输入的私有密钥文件的格式是DEM还是DER.DER格式采用ASN1的DER标准格式。
  26.     rem PEM格式就是base64编码格式.
  27.     openssl req -new -out root-req.csr -key root-key.key -keyform PEM
  28. else (
  29.     echo 根证书请求文件root-req.csr已经存在
  30. )
  31. echo 3.自签根证书
  32. if not exist root-cert.cer (
  33.     echo 使用root-req.csr证书和root-key.key私钥签发x509格式的自签根证书root-cert.cer
  34.     rem -in 要处理的CSR的文件名称,只有-new和-newkey俩个option没有被set,本option才有效
  35.     rem -signkey 签名私钥
  36.     rem -days证书的有效日期
  37.     openssl x509 -req -in root-req.csr -out root-cert.cer -signkey root-key.key -CAcreateserial -days 3650 
  38. else (
  39.     echo 自签根证书root-cert.cer已经存在
  40. )
  41. echo 4.导出p12格式根证书
  42. if not exist root.p12 (
  43.     openssl pkcs12 -export -clcerts -in root-cert.cer -inkey root-key.key -out root.p12 
  44. else (
  45.     echo p12格式根证书root-cert.cer已经存在
  46. )
  47. echo 生成root.jks文件
  48. set password=
  49. echo 输入jks的密码,密码至少必须为6个字符:
  50. set /p password=
  51. echo 密码是 %password% 稍后提示 信任这个认证?输入 y 即可
  52. echo.
  53. if exist root.jks (
  54.     del root.jks
  55. )
  56. keytool -import -v -trustcacerts -storepass %password% -alias root -file root-cert.cer -keystore root.jks 
  57. echo 已生成root.jks文件
  58. echo.
  59. echo 制作服务端证书
  60. call :sub server
  61. echo.
  62. echo 制作客户端证书
  63. call :sub client
  64. goto :end
  65. :sub
  66. echo 1.创建私钥
  67. if not exist %1-key.key (
  68.     openssl genrsa -out %1-key.key 1024
  69. else (
  70.     echo 私钥%1-key.key已经存在
  71. )
  72. echo 2.创建证书请求文件
  73. if not exist %1-req.csr (
  74.     openssl req -new -out %1-req.csr -key %1-key.key
  75. else (
  76.     echo 证书请求文件%1-req.csr已经存在
  77. )
  78. echo 3.自签证书
  79. if not exist %1-cert.cer (
  80.     openssl x509 -req -in %1-req.csr -out %1-cert.cer -signkey %1-key.key -CA root-cert.cer -CAkey root-key.key -CAcreateserial -days 3650
  81. else (
  82.     echo 自签证书%1-cert.cer已经存在
  83. )
  84. echo 4.导出p12格式证书
  85. if not exist %1.p12 (
  86.     openssl pkcs12 -export -clcerts -in %1-cert.cer -inkey %1-key.key -out %1.p12
  87. else (
  88.     echo 自签证书%1.p12已经存在
  89. )
  90. goto :eof
  91. :end
  92. echo.
  93. echo 整理归档生成的证书文件
  94. if not exist root (
  95.     md root
  96. )
  97. move root.p12 root/root.p12
  98. move root-cert.cer root/root-cert.cer
  99. move root-key.key root/root-key.key
  100. move root-req.csr root/root-req.csr
  101. move root-cert.srl root/root-cert.srl
  102. move root.jks root/root.jks
  103. if not exist server (
  104.     md server
  105. )
  106. move server.p12 server/server.p12
  107. move server-cert.cer server/server-cert.cer
  108. move server-key.key server/server-key.key
  109. move server-req.csr server/server-req.csr
  110. if not exist client (
  111.     md client
  112. )
  113. move client.p12 client/client.p12
  114. move client-cert.cer client/client-cert.cer
  115. move client-key.key client/client-key.key
  116. move client-req.csr client/client-req.csr
  117. if not exist 证书 (
  118.     md 证书
  119. )
  120. move root 证书/root
  121. move client 证书/client
  122. move server 证书/server
  123. echo 整理完毕
  124. pause

最终生成一个证书目录

我们所需的文件列表

证书/root/root.jks

证书/root/root.p12 可选

证书/server/server.p12

证书/client/client.p12

3.配置tomcat的conf/server.xml文件

将root.jks和server.p12 复制到tomcat目录下,文件可以不放置在这里如下配置支持绝对路径和相对路径。

在conf/server.xml中加入如下配置

  1.     <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
  2.                maxThreads="150" scheme="https" secure="true"
  3.                clientAuth="true" sslProtocol="TLS" 
  4.                acceptCount="100"
  5.                keystoreFile="server.p12" 
  6.                keystorePass="密码" 
  7.                keystoreType="PKCS12" 
  8.                truststoreFile="root.jks" 
  9.                truststorePass="密码" 
  10.                truststoreType="JKS" 
  11.     />

4.简单验证

登录https://127.0.0.1/会提示请求的网站要求证书,将client.p12导入到浏览器中即可

位置在internet选项-内容-证书

client.p12导入到个人证书选项卡里面

root.p12导入到受信任的根证书颁发机构里面

 

本文测试环境tomcat6

本文参考文章:
http://blog.chinaunix.net/u/12066/showart_491871.html
http://hi.baidu.com/favesoft/blog/item/9b94dbef3e573735acafd5ff.html
http://blog.chinaunix.net/u/12066/showart_491899.html
http://www.icnote.com/read.php?80
http://www.dedecms.com/web-art/fuwuqi/20060913/26244.html

原创粉丝点击