`
落地窗
  • 浏览: 439835 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Tomcat 7.0配置SSL的问题及解决办法

阅读更多
以前一直在用Tomcat 6.0.29版本,今下载了apache-tomcat-7.0.33-windows-x86.zip试试,结果在配置SSL时遇到一些问题。

Tomcat 6版本配置SSL过程有两步:

1、用JDK自带的keytool.exe来生成私有密钥和自签发的证书,如下:

keytool -genkey -keyalg RSA -alias tomcat 


按提示输入相关内容后,这条命令将在默认密钥库文件里新增一个别名为tomcat的私有密钥项及其自签发的证书。默认密钥库文件为:
%USERPROFILE%\.keystore  

2、修改Tomcat的conf\server.xml文件,即增加下面一段:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"            maxThreads="150" scheme="https" secure="true"            clientAuth="false" sslProtocol="TLS"            keystoreFile="${user.home}/.keystore"            keystorePass="changeit" /> 

这里的${user.home}就是上面的%USERPROFILE%,只是一个是Java语法,另一个是Windows语法。

设置好就能正常启动Tomcat了。

可是按同样的方法来配置Tomcat 7却启动不起来,报如下错误:
严重: Failed to initialize end point associated with ProtocolHandler ["http-apr-8443"]  java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR          at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:494)          at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:610)          at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:429)          at org.apache.catalina.connector.Connector.initInternal(Connector.java:981)          at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)          at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)          at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)          at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:814)          at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)          at org.apache.catalina.startup.Catalina.load(Catalina.java:633)          at org.apache.catalina.startup.Catalina.load(Catalina.java:658)          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)          at java.lang.reflect.Method.invoke(Method.java:597)          at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)          at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450)  -12-2 12:01:16 org.apache.catalina.core.StandardService initInternal  严重: Failed to initialize connector [Connector[HTTP/1.1-8443]]  org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-8443]]          at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)          at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)          at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)          at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:814)          at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)          at org.apache.catalina.startup.Catalina.load(Catalina.java:633)          at org.apache.catalina.startup.Catalina.load(Catalina.java:658)          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)          at java.lang.reflect.Method.invoke(Method.java:597)          at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)          at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450)  Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed          at org.apache.catalina.connector.Connector.initInternal(Connector.java:983)          at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)          ... 12 more  Caused by: java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR          at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:494)          at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:610)          at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:429)          at org.apache.catalina.connector.Connector.initInternal(Connector.java:981)          ... 13 more

仔细看上面的异常信息发现这是APR报的错误。Tomcat 6也有APR包但我从来都没用过。为此查看了Tomcat的ssl-how,在“Edit the Tomcat Configuration File”一节中说到:

Tomcat提供了两个SSL实现,一个是JSSE实现,另一个是APR实现。
Tomcat将自动选择使用哪个实现,即如果安装了APR则自动选择APR,否则选择JSSE。
如果不希望让Tomcat自动选择,而是我们自己指定一个实现则可通过protocol定义,如下:
<Connector protocol="..." /> 

我又查看了6.0的相同说明,里面与7.0的说明一模一样。因此问题只可能是:是否安装了APR包。

以前只听说过APR但没弄过。APR是什么文件?后来才发现APR文件名为tcnative-1.dll。进一步检查6.0和7.0的安装目录,结果发现6.0里没这个dll文件,而7.0里有。换句话说,6.0默认使用JSSE实现,而7.0默认使用APR实现。

弄明白缘由就好办了。由于习惯使用6.0的配置方式(即JSEE实现),因此只要把上面conf\server.xml里的protocol修改一下就行了:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"            maxThreads="150" scheme="https" secure="true"            clientAuth="false" sslProtocol="TLS"            keystoreFile="${user.home}/.keystore"            keystorePass="changeit" /> 

重新启动,一切正常。

应用程序HTTP自动跳转到HTTPS,解决如下,打开项目的web.xml,添加如下配置


<security-constraint> 
       <web-resource-collection > 
              <web-resource-name >eqm</web-resource-name> 
              <url-pattern>/*</url-pattern> 
       </web-resource-collection>
                             
       <user-data-constraint> 
              <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
       </user-data-constraint> 
</security-constraint>
分享到:
评论

相关推荐

    Tomcat 7.0 官方64位版

    在压缩包中,"Apache Tomcat7.0 v7.0.52 官方64位版_386w.com" 包含了Tomcat的完整安装文件,用户可以通过解压后按照指定步骤进行安装。主要目录包括: - **bin**: 包含启动和停止Tomcat的脚本。 - **conf**: 存放...

    Tomcat7.0 tomcat最新版本

    4. **增强的安全性**:Tomcat 7.0加强了安全特性,提供了更强的身份验证和授权机制,如集成Spring Security和JAAS,以及对SSL/TLS的改进支持,帮助保护Web应用程序免受攻击。 5. **更好的管理工具**:Tomcat 7.0...

    tomcat7.0.109下载

    10. **版本兼容性**:Tomcat 7.0.109适用于Java SE 6和7,不支持Java 8及更高版本。如果需要使用Java 8或更高版本,建议升级到Tomcat 8或9。 总的来说,Tomcat 7.0.109作为一个成熟的Java Web服务器,虽然不再接收...

    Linux下面配置Apache2 + tomcat7.0 + ssl 集群安装与配置

    在Linux环境下,构建一个基于Apache2和Tomcat7.0的SSL集群是一项关键任务,它涉及到网站的安全性和负载均衡。Apache作为前端服务器处理HTTPS请求,而Tomcat则作为后端应用服务器处理Java应用。以下是对这个配置过程...

    tomcat7.0.rar

    2. 解压:将下载的文件解压缩到你选择的目录,例如`/usr/local/tomcat7.0`。 3. 配置环境变量:设置`CATALINA_HOME`指向Tomcat的根目录,并将路径添加到系统的`PATH`环境变量中。 4. 启动与停止:使用`bin/startup....

    apache-tomcat7.0.100windows和linux版本安全版本.zip

    Apache Tomcat 7.0.100 是一个流行的开源软件,用作Java Servlet和JavaServer Pages(JSP)的容器,以及Java EE Web应用程序的标准实现。它由Apache软件基金会维护,是Apache Jakarta项目的一部分。这个版本适用于...

    Tomcat7.0_windows64压缩包下载

    【标题】"Tomcat7.0_windows64压缩包下载" 涉及的主要知识点是Apache Tomcat服务器在Windows 64位操作系统上的部署和使用。Tomcat是一款开源的Java Servlet容器,它实现了JavaServer Pages (JSP)、Java Servlet以及...

    Tomcat7.0(源码+jar包)

    4. **Context配置**:Tomcat7.0允许在Web应用的WEB-INF/web.xml文件之外定义Context配置,增强了灵活性。 5. **Jasper JSP编译器**:Jasper是Tomcat内置的JSP编译器,7.0版本进行了优化,提升了JSP页面的编译速度和...

    Tomcat7.0绿色版

    此外,Tomcat7.0还支持多线程、连接池和SSL加密通信,确保了Web应用的安全性和性能。为了优化性能,可以通过修改`server.xml`中的配置参数,如最大连接数、线程池大小等。 在实际开发中,Tomcat经常与Maven、...

    Tomcat 7.0

    【Tomcat 7.0】是一款广泛使用的开源Java Servlet容器,由Apache软件基金会开发和维护。它是基于Java的Web应用程序服务器,特别适用于...通过深入了解和配置Tomcat 7.0,可以充分利用其特性来满足各种Web应用的需求。

    Tomcat7.0(含配置文档).zip

    《深入浅出Tomcat7.0:Web开发者必备指南》 Tomcat7.0是一款广泛应用于Web开发领域的开源Java Servlet容器,由Apache软件基金会维护。它遵循Java EE规范,主要支持Servlet、JSP和JavaServer Pages等技术。作为轻量...

    apache-tomcat-7.0.100

    6. **安全性**:Tomcat提供了多种安全功能,如SSL/TLS支持以加密通信, Realm配置以验证用户身份,以及角色基础的访问控制。用户应根据需求配置`conf/tomcat-users.xml`和`context.xml`等文件来实现安全设置。 7. *...

    TOMCAT7.0绿色版

    安全性方面,TOMCAT7.0加强了安全管理,提供了更多的安全配置选项,如SSL/TLS支持,可以保护Web应用的数据传输安全。同时,它还支持基于角色的访问控制(RBAC),使得权限管理更加精细化。 在部署方面,TOMCAT7.0...

    linux-tomcat7.0

    这个“linux-tomcat7.0”压缩包是专门为64位Linux系统设计的,包含了在Linux环境下运行Tomcat 7.0所需的所有文件。 首先,让我们详细了解一下Tomcat 7.0的关键特性: 1. **Servlet容器**:Tomcat作为Servlet容器,...

    配置好的tomcat7.0服务器

    《配置好的Tomcat 7.0服务器:搭建与优化指南》 Tomcat 7.0是Apache软件基金会的Jakarta项目中的一个核心组件,它是一个开源的、免费的Web应用服务器,广泛应用于Java Servlet和JavaServer Pages(JSP)的部署。在...

    tomcat7.0(linux版)

    Linux和Unix系统上的Tomcat7.0版本提供了一个稳定且高性能的平台,适用于部署Java Web应用程序。 在Linux或Unix环境下安装Tomcat7.0,你需要先下载对应的tarball文件,如`apache-tomcat-7.0.11.tar.gz`。遵循以下...

    apache-tomcat7.0安装版

    这个"apache-tomcat7.0安装版"提供的是一键安装版本,旨在简化用户安装和配置Tomcat7.0的过程,使得对于不熟悉服务器管理的用户来说,也能轻松搭建jsp运行环境。 一、Tomcat简介 Apache Tomcat是Apache软件基金会的...

    apache-tomcat-7.0.100.tar.gz

    总之,Apache Tomcat 7.0.100在Linux上的部署涉及解压、配置、启动和管理等步骤。通过熟悉Tomcat的目录结构和配置文件,以及掌握如何在Linux环境中运行和管理服务,你可以有效地运行和维护Java Web应用程序。同时,...

    tomcat 7.0

    开发者可以通过学习如何配置Tomcat、部署应用、调整性能以及解决常见问题,来提升自己的技能水平。同时,熟悉Tomcat与其他Java EE组件的集成,如数据库连接池、缓存解决方案等,也是提高应用效率的关键。

Global site tag (gtag.js) - Google Analytics