当前位置: 代码迷 >> Web前端 >> Tomcat配备成https方式访问(单向认证)
  详细解决方案

Tomcat配备成https方式访问(单向认证)

热度:354   发布时间:2012-10-21 09:00:07.0
Tomcat配置成https方式访问(单向认证)

在命令提示符窗口,进入Tomcat目录,执行以下命令:
keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore -validity 3600
通过以上步骤生成server.keystore证书文件、

注意: localhost,是网站的域名或者ip,根据实际情况填写,比如 www.baidu.com? 192.168.0.85? 否则会出现证书上的名称无效,或者与站点名称不匹配。


将servlet.xml一下的的注释打开(最好拷贝此段)
<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->??
<Connector protocol="org.apache.coyote.http11.Http11Protocol"????
???????????????????? port="8443" maxHttpHeaderSize="8192"??
?????????? maxThreads="150" minSpareThreads="25" maxSpareThreads="75"??
?????????? enableLookups="false" disableUploadTimeout="true"??
?????????? acceptCount="100" scheme="https" secure="true"??
?????????? clientAuth="false" sslProtocol="TLS"???????????????????
?????????? keystoreFile="server.keystore"????
?????????? keystorePass="changeit"/>?
到这一步访问https;//ip:8443/item

一般Tomcat默认的SSL端口号是8443,但是对于SSL标准端口号是443,这样在访问网页的时候,直接使用https而不需要输入端口号就可以访问,如https://loalhost/webserver
想要修改端口号,需要修改Tomcat的server.xml文件:
1.non-SSL HTTP/1.1 Connector定义的地方,一般如下:
???? <Connector port="80" maxHttpHeaderSize="8192"
??????????????? maxThreads="500" minSpareThreads="25" maxSpareThreads="75"
??????????????? enableLookups="false" redirectPort="443" acceptCount="100"
??????????????? connectionTimeout="20000" disableUploadTimeout="true" />
将其中的redirectPort端口号改为:443
2.SSL HTTP/1.1 Connector定义的地方,修改端口号为:443,如下:
<Connector????
?? port="443" maxHttpHeaderSize="8192"
?? maxThreads="150" minSpareThreads="25"
?? maxSpareThreads="75"
?? enableLookups="false"
?? disableUploadTimeout="true"
?? acceptCount="100" scheme="https"
?? secure="true"
?? clientAuth="false" sslProtocol="TLS"
?? keystoreFile="conf/tomcat.keystore"
?? keystorePass="123456" />
3.AJP 1.3 Connector定义的地方,修改redirectPort为443,如下:
???? <Connector port="8009"
??????????????? enableLookups="false" redirectPort="443" protocol="AJP/1.3" />

重新启动Tomcat就可以了。到这一步可以形成访问方式 http://ip/item

到tomcat下面的webapps下面的ROOT下面的index.jsp文件的内容
<?xml version="1.0" encoding="ISO-8859-1"?>
? <%response.sendRedirect("/item");%>

修改web.xml文件的内容
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
??? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
??? xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
??? version="2.4">

? <display-name>Welcome to Tomcat</display-name>
? <description>
???? Welcome to Tomcat
? </description>

? <welcome-file-list>
?? <welcome-file>/index.jsp</welcome-file>
? </welcome-file-list>
</web-app>
删除lib目录下的lib文件
重启Tomcat服务器,在这一步可以直接通过https:ip来访问项目

?

(附录:)tomcat的配置文件SSL部分详细说明

配置文件server.xml,SSL部分:
Xml代码 复制代码
  1. ????<!--?A?"Connector"?represents?an?endpoint?by?which?requests?are?received ??
  2. ?????????and?responses?are?returned.?Documentation?at?: ??
  3. ?????????Java?HTTP?Connector:?/docs/config/http.html?(blocking?&?non-blocking) ??
  4. ?????????Java?AJP??Connector:?/docs/config/ajp.html ??
  5. ?????????APR?(HTTP/AJP)?Connector:?/docs/apr.html ??
  6. ?????????Define?a?non-SSL?HTTP/1.1?Connector?on?port?8080 ??
  7. ????-->??
  8. ????<Connector??port="8443"?maxHttpHeaderSize="8192"??
  9. ????????maxThreads="150"??
  10. ????????minSpareThreads="25"??
  11. ????????maxSpareThreads="75"??
  12. ????????enableLookups="false"??
  13. ????????disableUploadTimeout="true"??
  14. ????????acceptCount="100"??
  15. ????????scheme="https"??
  16. ????????secure="true"??
  17. ????????clientAuth="false"??
  18. ????????sslProtocol="TLS"??
  19. ????????keystoreFile="D:/Tomcat/conf/tomcatKey.keystore"??
  20. ????????keystorePass="changeit"??
  21. ????????algorithm="SunX509"??
  22. ????/>??
Xml代码 复制代码?收藏代码
  1. ????<!--?A?"Connector"?represents?an?endpoint?by?which?requests?are?received ??
  2. ?????????and?responses?are?returned.?Documentation?at?: ??
  3. ?????????Java?HTTP?Connector:?/docs/config/http.html?(blocking?&?non-blocking) ??
  4. ?????????Java?AJP??Connector:?/docs/config/ajp.html ??
  5. ?????????APR?(HTTP/AJP)?Connector:?/docs/apr.html ??
  6. ?????????Define?a?non-SSL?HTTP/1.1?Connector?on?port?8080 ??
  7. ????-->??
  8. ????<Connector??port="8443"?maxHttpHeaderSize="8192"??
  9. ????????maxThreads="150"??
  10. ????????minSpareThreads="25"??
  11. ????????maxSpareThreads="75"??
  12. ????????enableLookups="false"??
  13. ????????disableUploadTimeout="true"??
  14. ????????acceptCount="100"??
  15. ????????scheme="https"??
  16. ????????secure="true"??
  17. ????????clientAuth="false"??
  18. ????????sslProtocol="TLS"??
  19. ????????keystoreFile="D:/Tomcat/conf/tomcatKey.keystore"??
  20. ????????keystorePass="changeit"??
  21. ????????algorithm="SunX509"??
  22. ????/>??
??? <!-- A "Connector" represents an endpoint by which requests are received
???????? and responses are returned. Documentation at :
???????? Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
???????? Java AJP? Connector: /docs/config/ajp.html
???????? APR (HTTP/AJP) Connector: /docs/apr.html
???????? Define a non-SSL HTTP/1.1 Connector on port 8080
??? -->
    <Connector  port="8443" maxHttpHeaderSize="8192"
        maxThreads="150"
        minSpareThreads="25"
        maxSpareThreads="75"
        enableLookups="false"
        disableUploadTimeout="true"
        acceptCount="100"
        scheme="https"
        secure="true"
        clientAuth="false"
        sslProtocol="TLS"
        keystoreFile="D:/Tomcat/conf/tomcatKey.keystore"
        keystorePass="changeit"
        algorithm="SunX509"
    />

?

属性说明:

?port:???? 这个port属性(默认值是8443)是 TCP/IP端口数码,Tomcat在其上监听安全连接。你可以把它更改成任何你愿意要的数值(如默认的https通信,数目是443)。不过,在许多操作系统中,要想在比1024小的端口数码上运行Tomcat,需要特殊的设置(它超出了这个文档资料的范围)。
?
redirectPort:?如果你在这里更改端口数值,你还必须更改在non-SSL连接器上的redirectPort 这个属性特定的值。这允许Tomcat自动地redirect那些试图访问有安全限制页面的用户,指明根据 Servlet 2.4 Specification要求,SSL是必需的
?
clientAuth:?如果你想要Tomcat要求所有的SSL客户在使用这个socket时出示用户认证书,把这个值设定为 true 。如果你想要Tomcat要求出示用户认证书,但是如果没有认证书也可以, 就把这个值设定为want 。
?
keystoreFile:?如果你产生的keystore文件不在Tomcat期望的默认地方(一个叫做.keystore 的文件在Tomcat运行的主目录),就添加这个属性。你可以指定一个绝对路径名称, 或者一个由$CATALINA_BASE环境变量而派生的相对路径名称。
?
keystorePass:?如果你使用一个不同的keystore(以及认证书)密码,而不是Tomcat期望的密码 (就是changeit),添加这个元素。
?
keystoreType:?如果使用一个PKCS12 keystore的话,就添加这个element。 有效的值是JKS 和 PKCS12
?
sslProtocol:?要在这个socket上被使用的加密/解密协定。如果你在使用Sun的JVM,我们不提倡更改 这个值。据报道,TLS协定的IBM's 1.4.1 实现与一些通用的浏览器不兼容。 如果是这样,就使用value SSL
?
ciphers:?这个socket允许使用的由逗号分隔开的加密密码列单。默认的情况下,任何可用的密码都允许被使用。
?
algorithm:?可用的X509算法。默认是Sun的实现( SunX509 )。 对于IBM JVMs,你应该使用值 IbmX509。对于其他卖主,查阅JVM文档资料来 找正确的值。
?
truststoreFile:?用来验证用户认证书的TrustStore文件。
?
truststorePass:?访问TrustStore的密码。默认值就是keystorePass的值。
?
truststoreType:?如果你在使用与KeyStore不同格式的TrustStore,添加这个元素。 合法的值是JKS和PKCS12
?
keyAlias:?如果 keystore 里面有多个 key,你可以为用这个选项为加入的 key 起一个名字。 如果没有指定名字,使用时 keystore 内的第一个 key 将会被使用。

  相关解决方案