tomcat7 配置HTTPS OPENSSL生成证书

因为在项目中要使用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





你可能感兴趣的:(ssl,https,tomcat7,OpenSSL)