如何设置Apache Tomcat 8以在HTTPS

时间:2016-08-29 12:28:08

标签: java eclipse tomcat servlets

我想在HTTPS而不是HTTP上运行我的servlet,所以我按照this thread上的说明对我的servlet应用程序的web.xml进行了以下更改:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Bookyard Server</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

然而,当我运行为 - &gt;在Eclipse中运行服务器,我得到以下页面:

enter image description here

当我在Fiddler中编写相同的请求时,我看到服务器返回502,表示服务器没有侦听我使用的端口(8443)。

  

HTTP / 1.1 502 Fiddler - 连接失败日期:2016年8月29日星期一   格林威治标准时间12:22:14内容类型:text / html; charset = UTF-8连接:关闭   缓存控制:无缓存,必须重新验证时间戳:17:52:14.594

     

[Fiddler]与&#39; localhost&#39;的连接失败。
错误:   ConnectionRefused(0x274d)。
System.Net.Sockets.SocketException   由于目标机器是主动的,因此无法建立连接   拒绝了它127.0.0.1:8443

当我通过代码向此网址发出网络请求时,会导致java.net.ConnectException: Connection refused例外。

因此,我显然没有正确设置。你能帮我吗?

更新

在Nicolas Filotto提供的答案中建议进行更改后,当我通过启动Tomcat安装文件夹中的startup.bat文件手动启动Tomcat,然后浏览到https://localhost:8443时,它会给我无效浏览器中出现证书错误,我在浏览器中为此URL添加了一个例外,我看到Tomcat启动画面就好了。

但是当我在Eclipse中启动应用程序时,它会转向旧的非SSL URL并为该页面提供服务,就像它来自不安全的URL一样。

控制台窗口输出此信息,如果这可能是有关错误的有用提示。

  

2016年8月29日下午6:47:16   org.apache.tomcat.util.digester.SetPropertiesRule开始警告:   [SetPropertiesRule] {服务器/服务/引擎/主机/上下文}设置   财产来源&#39; to&#39; org.eclipse.jst.jee.server:Bookyard.server&#39;没有   找不到匹配的属性。 2016年8月29日下午6:47:16   org.apache.catalina.startup.VersionLoggerListener log INFO:Server   版本:Apache Tomcat / 8.0.36 2016年8月29日下午6:47:16   org.apache.catalina.startup.VersionLoggerListener log INFO:Server   建造时间:2016年6月9日13:55:50 UTC 2016年8月29日下午6:47:16   org.apache.catalina.startup.VersionLoggerListener log INFO:Server   编号:8.0.36.0 2016年8月29日下午6:47:16   org.apache.catalina.startup.VersionLoggerListener日志信息:操作系统名称:
  Windows 7 2016年8月29日下午6:47:16   org.apache.catalina.startup.VersionLoggerListener log INFO:OS   版本:6.1 2016年8月29日下午6:47:16   org.apache.catalina.startup.VersionLoggerListener日志信息:   建筑:amd64 2016年8月29日下午6:47:16   org.apache.catalina.startup.VersionLoggerListener log INFO:Java Home:   C:\ Program Files \ Java \ jre1.8.0_65 2016年8月29日下午6:47:16   org.apache.catalina.startup.VersionLoggerListener log INFO:JVM   版本:1.8.0_65-b17 2016年8月29日下午6:47:16   org.apache.catalina.startup.VersionLoggerListener log INFO:JVM   供应商:Oracle Corporation 2016年8月29日下午6:47:16   org.apache.catalina.startup.VersionLoggerListener日志信息:   CATALINA_BASE:
  C:\ Sathyaish \实践\的Java \日食\ workspace.metadata.plugins \ org.eclipse.wst.server.core \ TMP1   2016年8月29日下午6:47:16   org.apache.catalina.startup.VersionLoggerListener日志信息:   CATALINA_HOME:C:\ Program Files \ Apache Software   Foundation \ Tomcat 8.0 2016年8月29日下午6:47:16   org.apache.catalina.startup.VersionLoggerListener log INFO:Command   线参数:   -Dcatalina.base = C:\ Sathyaish \实践\爪哇\蚀\ workspace.metadata.plugins \ org.eclipse.wst.server.core \ TMP1   2016年8月29日下午6:47:16   org.apache.catalina.startup.VersionLoggerListener log INFO:Command   line参数:-Dcatalina.home = C:\ Program Files \ Apache Software   Foundation \ Tomcat 8.0 2016年8月29日下午6:47:16   org.apache.catalina.startup.VersionLoggerListener log INFO:Command   线参数:   -Dwtp.deploy = C:\ Sathyaish \实践\爪哇\蚀\ workspace.metadata.plugins \ org.eclipse.wst.server.core \ TMP1 \ wtpwebapps   2016年8月29日下午6:47:16   org.apache.catalina.startup.VersionLoggerListener log INFO:Command   line参数:-Djava.endorsed.dirs = C:\ Program Files \ Apache Software   Foundation \ Tomcat 8.0 \认可2016年8月29日下午6:47:16   org.apache.catalina.startup.VersionLoggerListener log INFO:Command   line参数:-Dfile.encoding = Cp1252 2016年8月29日下午6:47:16   org.apache.catalina.core.AprLifecycleListener lifecycleEvent INFO:The   基于APR的Apache Tomcat Native库,它允许最佳   在生产环境中没有找到性能   java.library.path:C:\ Program   文件\的Java \ jre1.8.0_65 \ BIN; C:\ WINDOWS \太阳\的Java \ BIN; C:\ WINDOWS \ SYSTEM32; C:\ WINDOWS; C:/程序   文件/的Java / jre1.8.0_65 /斌/服务器; C:/程序   文件/的Java / jre1.8.0_65 /箱; C:/程序   文件/的Java / jre1.8.0_65 / lib中/ AMD64; C:\ ProgramData \ ORACLE \的Java \ javapath; C:\ PROGRAM   Files \ Common Files \ Microsoft Shared \ Windows Live; C:\ Program Files   (x86)\ Common Files \ Microsoft Shared \ Windows Live; C:\ Program Files   (86)\ NVIDIA   公司\ PhysX物理\常见; C:\ WINDOWS \ SYSTEM32; C:\ WINDOWS; C:\ WINDOWS \ SYSTEM32 \ WBEM; C:\ WINDOWS \ SYSTEM32 \ WindowsPowerShell \ V1.0 \; C:\ PROGRAM   文件(x86)\ Sony \ VAIO启动设置工具; C:\ Program Files \ Trend   Micro \ AMSP; C:\ Program Files(x86)\ Windows Live \ Shared; C:\ Program   Files \ TortoiseGit \ bin; C:\ Program Files(x86)\ Smart   Projects \ IsoBuster; C:\ Program Files \ Microsoft SQL   Server \ 110 \ Tools \ Binn \; C:\ Program Files(x86)\ Microsoft   SDKs \ TypeScript \ 1.0 \; C:\ Program Files \ Microsoft SQL   Server \ 120 \ Tools \ Binn \; C:\ Program Files \ Microsoft SQL Server \ Client   SDK \ ODBC \ 110 \ Tools \ Binn \; C:\ Program Files(x86)\ Microsoft SQL   Server \ 120 \ Tools \ Binn \; C:\ Program Files \ Microsoft SQL   Server \ 120 \ DTS \ Binn \; C:\ Program Files(x86)\ Microsoft SQL   Server \ 120 \ Tools \ Binn \ ManagementStudio \; C:\ Program Files   (x86)\ Microsoft SQL Server \ 120 \ DTS \ Binn \; C:\ Program Files   (x86)\ Skype \ Phone \; C:\ Program Files \ Microsoft \ Web Platform   Installer \; C:\ Program Files(x86)\ QuickTime \ QTSystem \; C:\ Program   Files \ Git \ cmd; C:\ Program Files \ nodejs \; C:\ Program Files \ Microsoft SQL   服务器\ 130个\ TOOLS \ BINN \; C:\ Users \用户计算机\应用程序数据\本地\程序\ Python的\ Python36 \脚本\; C:\ Users \用户计算机\应用程序数据\本地\程序\ Python的\ Python36 \; C:\用户\ computer.dnx \ BIN; C:\ Users \用户计算机\应用程序数据\漫游\ NPM; C:\ Sathyaish \ SOFTWARE \蚀-JEE-MARS -2- Win32的x86_64的\蚀;;。   2016年8月29日下午6:47:16 org.apache.coyote.AbstractProtocol init INFO:   初始化ProtocolHandler [&#34; http-nio-8080&#34;] 2016年8月29日下午6:47:17   org.apache.tomcat.util.net.NioSelectorPool getSharedSelector INFO:   使用共享选择器进行servlet写入/读取2016年8月29日下午6:47:17   org.apache.coyote.AbstractProtocol init INFO:正在初始化   ProtocolHandler [&#34; ajp-nio-8009&#34;] 2016年8月29日下午6:47:17   org.apache.tomcat.util.net.NioSelectorPool getSharedSelector INFO:   使用共享选择器进行servlet写入/读取2016年8月29日下午6:47:17   org.apache.catalina.startup.Catalina加载INFO:初始化   于2016年8月29日下午6:47:17发表于2448 ms   org.apache.catalina.core.StandardService startInternal INFO:正在启动   服务卡塔利娜2016年8月29日下午6:47:17   org.apache.catalina.core.StandardEngine startInternal INFO:正在启动   Servlet引擎:Apache Tomcat / 8.0.36 2016年8月29日下午6:47:19   org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom   信息:为会话ID生成创建SecureRandom实例   使用[SHA1PRNG]花了[283]毫秒。 2016年8月29日下午6:47:20   org.apache.coyote.AbstractProtocol start INFO:Starting   ProtocolHandler [&#34; http-nio-8080&#34;] 2016年8月29日下午6:47:20   org.apache.coyote.AbstractProtocol start INFO:Starting   ProtocolHandler [&#34; ajp-nio-8009&#34;] 2016年8月29日下午6:47:20   org.apache.catalina.startup.Catalina启动INFO:服务器启动   2920毫秒

1 个答案:

答案 0 :(得分:2)

您还必须取消注释文件httpsconf/server.xml的连接器:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />

只需按照此guide进行操作,因为您还需要创建证书并将相关属性添加到连接器的配置中。

最后,它看起来像这样:

<Connector
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" maxThreads="150"
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="/path/to/my/keystore" keystorePass="My keystore password"
           clientAuth="false" sslProtocol="TLS"/>