因为在项目中要使用HTTPS,所以参考了网上的很多文章,终于将环境配置好了,在此做个记录,给有需要的同学,少走弯路。
我的环境:WIN7 64位 +TOMCAT7 + OPENSSL1.0f
1. 首先安装OPENSSL1.0f软件及其依赖的软件,这个软件是别人编译好的,不需要自己编
译。我们主要是使用OPenSSL软件生成证书等信息,其它两个软件是OpenSSL运行时需
要。OPENSSL安装完成后,一般是在C盘,如我电脑上安装在C:\OpenSSL-Win64目录
中。注意我的操作系统是64位的,所以需要64位软件,如果是32位的系统,请下载相应的
软件。
Win64OpenSSL-1_0_1f.exe,
ActivePerl-5.16.3.1603-MSWin32-x64-296746.msi,
vcredist_x64.exe
2. 用管理员身份运行CMD命令, 进入到C:\OpenSSL-Win64\bin目录,执行openssl.exe
命令,或者直接以管理员身份运行openssl.exe。
3. 首先要生成服务器端的私钥(key文件):
genrsa -des3 -out server.key 1024
4. 生成证书请求csr文件,交给CA签名后形成服务端自己的证书
req -new -key server.key -out server.csr -config
openssl.cfg
5. CSR文件必须有CA的签名才可形成证书.OPENSSL可以生成自己的CA证书
req -new -x509 -keyout ca.key -out ca.crt -config openssl.cfg
6. 用生成的CA的证书为刚才生成的server.csr文件签名
ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cfg
使用CA签名时,需要做一些准备工作,当我们安装完成OPENSSL时,在安装目录下的bin\PEM目录中有一个demoCA目录,如我本机的demoCA的路径为:C:\OpenSSL-Win64\bin\PEM\demoCA,请将整个目录拷贝到bin目录中,如我本机的目录为:C:\OpenSSL-Win64\bin\demoCA,并在demoCA目录中建立一个newcerts目录,我本机的地址为:
C:\OpenSSL-Win64\bin\demoCA\newcerts。
生成证书以后,就可以将其放到tomcat7/conf的目录下(建议),并修改conf/server.xml配置文件,在windows下部署修改如下:
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
SSLEnabled="true"
SSLCertificateFile="${catalina.base}/conf/server.crt"
SSLCertificateKeyFile="${catalina.base}/conf/server.key"
SSLPassword="password"/>
如果是单个工程需要https访问,修改工程中的web.xml文件,增加如下内容:
<!-- 增加ssl请求 -->
<login-config>
<!-- 认证方式基于客户端证书-->
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<security-constraint>
<!-- 此元素确定应该保护的资源 -->
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<!-- url-pattern适用于直接访问这些资源的客户机,不适用于转发-->
<url-pattern>/*</url-pattern>
</web-resource-collection>
<!-- 访问相关资源时使用任何传输层保护 -->
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
在LIUNX下部署会有一些区别,首先要将证书和密钥放入到密码库中,并且密码库的格式必须是JDK可以识别的,因为我们直接用的是OPENSSL生成的密钥和证书,所以先将执行如下命令,将密钥和证书放入到pkcs12的证书文件中。
7.创建server端的pkcs12文件
pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name demo_server
注意-name demo_server,这个是指定keystore的别名。
8.转换pkcs12为JKS keystore文件,这个过程需要用到jetty.jar, 在命令行中执行如下JAVA命令,切记要使用管理员身份运行cmd命令。
java org.mortbay.util.PKCS12Import server.p12 server.jks
生成server.jks后,就可以将其放到tomcat7/conf的目录下(建议),并修改conf/server.xml配置文件如下:
<Connector port="8443" protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
maxThreads="150"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
SSLEnabled="true"
keystoreFile="/opt/apache-tomcat7.0.42/conf/server.jks"
keystorePass="password"/>
protocol属性的取值很重要,如果修改为其它值,可能使用OPENSSL软件生成的密钥库文件就不支持,需要使用JDK命令生成的密钥库。
好了,通过https://localhost:8443端口访问,看是否可以显示tomcat首页。
相应的软件我已经上传到百度云上面。此处不能上传超过10M的软件。
http://pan.baidu.com/share/link?shareid=1291566681&uk=3339208821