如何配置https访问tomcat

时间:2021-12-26 15:14:36

1.     首先确定已经安装了JDK或JRE,并配置java运行环境。

OnWindows:

C:\>set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_16

C:\>set PATH=%JAVA_HOME%\bin;%PATH%

On Linux:

# exportJAVA_HOME=/usr/java/latest

# exportPATH=$JAVA_HOME/bin:$PATH

2.     使用java自带的keytool生成证书

打开命令行窗口,运行:

Keytool

应该能看到相关的帮助文本,否则检查你的java运行环境是否正确。

键入以下命令来生成一个自签名的服务器证书

keytool -genkeypair -alias tomcat -keyalgRSA -keysize 1024 -dname "CN=localhost, OU=Organization, O=CompanyName, L=City, S=State, C=US" -validity 365 -keystore keystore<eg: D:\tomcat.keystore>
Enter keystore password:<eg:tomcat>

这样就生成了证书,将证书放到合适的地方(任意地方都可以)。

 

Keytool –genkey–alias (证书名eg:  tomcat) –keyalg RSA–keystore (证书存放路径eg: D:\tomcat.keystore)

 

keytool -genkeypair-alias tomcat -keyalg RSA -keysize 1024 -dname "CN=localhost,OU=Organization, O=Company Name, L=City, S=State, C=US" -validity365 -keystore e:/tomcat.keystore

 

 

keytool -genkey -alias tomcat -keyalg RSA-keystoree:/tomcat.keystore -validity 36500

 

keytool -genkey -alias lenny -keyalg RSA -keystoreC:\lenny -validity 36500 -keysize 512

其中lenny是别名,可以随便取;-keyalg RSA是加密算法;-keystore C:\lenny是生成的文件(在C盘下);      -validity 36500是有效期为10年;-keysize 512生成的密钥是512位的。

( 注意:填写具体信息时,"名字和姓氏"一定是你的域名或IP地址,比如我在实验室没有域名,IP地址为192.168.2.101,所以我的"名字和姓氏"填写的是192.168.2.101,所以实验室的其他电脑也可以使用https访问我的Web应用程序  )

 

3.使用方式:

有两种使用方式,一个是对tomcat的全局应用,一种是基于单个应用

1.》基于tomcat的全局应用:

修改%tomcat_home%\conf的web.xml,指定想要采用的url,下面为对/login采样https访问

[xml] view plaincopy
  1. <login-config>    
  2.     <auth-method>CLIENT-CERT</auth-method>    
  3.     <realm-name>Client Cert Users-only Area</realm-name>    
  4. </login-config>    
  5. <security-constraint>    
  6.     <web-resource-collection >    
  7.         <web-resource-name >SSL</web-resource-name>    
  8.         <url-pattern>/login/*</url-pattern>    
  9.     </web-resource-collection>    
  10.     <user-data-constraint>    
  11.         <transport-guarantee>CONFIDENTIAL</transport-guarantee>    
  12.     </user-data-constraint>    
  13. </security-constraint>  

 也就是会匹配所有的/login/*的请求


   修改tomcat目录下的server.xml文件并找到关于SSL的相关段

<!--
<Connector port="8443" protocol="HTTP/1.1"
SSLEnabled="true" maxThreads="150" scheme="https"
secure="true" clientAuth="false" sslProtocol="TLS"/>

-->

去掉ssl相关段的注释。

添加keystoreFile = “D:\tomcat.keystore

添加keystorePass = “tomcat”


2》基于单个应用

修改%app_project%\WEB-INF的web.xml,指定想要采用的url,下面为对/ab/*采样https访问

  1. <login-config>    
  2.     <auth-method>CLIENT-CERT</auth-method>    
  3.     <realm-name>Client Cert Users-only Area</realm-name>    
  4. </login-config>    
  5. <security-constraint>    
  6.     <web-resource-collection >    
  7.         <web-resource-name >SSL</web-resource-name>    
  8.         <url-pattern>/ab/*</url-pattern>    
  9.     </web-resource-collection>    
  10.     <user-data-constraint>    
  11.         <transport-guarantee>CONFIDENTIAL</transport-guarantee>    
  12.     </user-data-constraint>    
  13. </security-constraint>  

 注意:

采样https的端口默认是8443,如果需要路由需要单独配置  
  1. 采样https的端口默认是8443,如果需要路由需要单独配置 

 注意:保存后重启tomcat可通过https://ip:8443/webproject(你的web项目)通过https访问,以上使用8443端口,若改为443在访问时可不加端口,因为443是https默认端口
 
 
强制https访问
 
在tomcat\conf\web.xml中的</welcome-file-list>后面加上以下配置:

 
 
<login-config> 
    <!-- Authorization setting for SSL --> 
    <auth-method>CLIENT-CERT</auth-method> 
    <realm-name>Client Cert Users-only Area</realm-name> 
</login-config> 
<security-constraint> 
    <!-- Authorization setting for SSL --> 
    <web-resource-collection > 
        <web-resource-name >SSL</web-resource-name> 
        <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
        <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 
 
这样输入http://ip:8080/webproject会强制转到https://ip:8443/webproject
 
 
若https端口配置为其它端口了记得把http转接端口一起改了


 
<Connector port="8080" protocol="HTTP/1.1"  
           connectionTimeout="20000"  
           redirectPort="<span style="color:#FF0000;">8443</span>" URIEncoding="UTF-8" />


4.     重启TOMCAT就可使用HTTPS访问项目了。

5.     如何配置tomcat总是使用HTTPS访问

6.     在WEB-INF/web.xml中的</welcome-file-list>后面加上这样一段:

<!—

Require HTTPS for everything except /img(favicon) and /css.

-->
<security-constraint>
   <web-resource-collection>
       <web-resource-name>HTTPSOnly</web-resource-name>
       <url-pattern>/*</url-pattern>
   </web-resource-collection>
   <user-data-constraint>
       <transport-guarantee>CONFIDENTIAL</transport-guarantee>
   </user-data-constraint>
</security-constraint>
<security-constraint>
   <web-resource-collection>
       <web-resource-name>HTTPSOrHTTP</web-resource-name>
          <url-pattern>*.ico</url-pattern>
          <url-pattern>/img/*</url-pattern>
          <url-pattern>/css/*</url-pattern>
   </web-resource-collection>
   <user-data-constraint>
       <transport-guarantee>NONE</transport-guarantee>
   </user-data-constraint>
</security-constraint>

 

 

配置指定内容访问需要HTTPS

<!--定义哪些页面需要使用https,只需要后台使用即可。-->

<security-constraint>

     <web-resource-collection>

       <web-resource-name>HTTPSOnly</web-resource-name>

       <url-pattern>/admin_index.jsp</url-pattern>

       <url-pattern>/login.jsp</url-pattern>

     </web-resource-collection>

     <user-data-constraint>

       <transport-guarantee>CONFIDENTIAL</transport-guarantee>

     </user-data-constraint>

</security-constraint>

 

 

 

7.     生成服务器证书请求

keytool -certreq -keyalg RSA -alias tomcat -fileserver.csr

-keystore<your_keystore_filename>

 

keytool -certreq -keyalg RSA -alias tomcat -fileserver.csr -keystore e:/tomcat.keystore

 

8.     CSR文件必须有CA的签名才可形成证书.可将此文件发送到verisign等地方由它验证,要交一大笔钱,测试时创建CA 其效果一样的。

openssl req -new-x509 -keyout ca.key -out ca.crt

 

*这一步可能提示什么无法签证什么的,忽略不计。

 

9.     使用生成的CA来给刚才的csr 文件签名。

Openssl ca -inserver.csr -out server.crt -cert ca.crt -keyfile ca.key.

 

10. 导入CA根证书

keytool -import -alias root -keystore<your_keystore_filename>

-trustcacerts -file<filename_of_the_chain_certificate>

 

 

keytool -import -alias root -keystore tomcat.keystore-trustcacerts -file  ca.crt

 

 

 

11. 导入新的证书

keytool -import -alias tomcat -keystore<your_keystore_filename>

-file<your_certificate_filename>

导入证书时,可能会报der 错误,需要将server.crt 转换成 server.der文件

openssl x509 -in G:\SSL\server.crt -outG:\SSL\server.der - outform DER

12. openssl.cfg 文件需要修改的地方。

1.     [ policy_match ]部分,前三个都是match,需要把stateOrProvinceName,organizationName都修改成optional。

2.     [ CA_default ]部分,dir修改成./PEM/demoCA

13. 将根证书导入java的cacerts 证书库中。

进入$JAVA_HOME\jre6\lib\security中,运行:

keytool -import -alias jhkj -keystorecacerts -file<filename_of_the_chain_certificate>-trustcacerts

cacerts证书库的默认密码是:changeit

1.   查看证书列表

keytool -list -keystore cacerts

2.   删除证书

keytool -delete -alias jhkj -keystorecacerts

14. 11

15. 2

16. 3

17. 4

18. 5

 

 

 

 

New add  11 12以后忽略,生成证书的时候要和openssl Bin路径结合起来,路径要灵活应用。(将tomcat.keystoreserver.csr文件copyopenssl Bin下,执行openssl的命令)

 

如果启动tomcate 无法加载或识别证书,删除 tomcate  bin下tcnative-1.dll文件。

 

 

上述红色部分是必须按顺序执行的。

 

删除证书:

keytool -delete -aliastomcat -keystore e:\tomcat.keystore -storepass tomcat

 

    删除其它也是import等更改为delete即可。