【发布时间】:2021-08-18 09:46:33
【问题描述】:
我在 digitalocean 的 ubuntu 虚拟机中使用 apache 服务器托管了一个网站。我想在我的后端 url 上配置 Tomcat 8 上的 SSL 以使其成为 HTTPS。
为此,我生成了一个 .keystore 并更改了 tomcat/config 目录中的 server.xml 文件。 但是当我加载端口 8443 和我的 ip (https://111.11.11.11:8443/) 时,它不会加载。 8443端口不在服务器监听列表中。
我的 server.xml 文件如下。
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector SSLEnabled="true" acceptCount="100" clientAuth="false"
disableUploadTimeout="true" enableLookups="false"
keystoreFile="/home/sedsslweb/tomcat.keystore" keystorePass="password"
maxThreads="25" port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
scheme="https" secure="true" sslProtocol="TLS"/>
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
基本上我想要的是使后端 url https 因为我无法将请求从我的 https 前端 url 发送到后端 http url 因为它被阻止是因为混合内容(前端和后端必须是https还是http)。
我被这个问题困扰了好几天,谁能帮我解决这个问题。或者至少是制作后端 https 的替代方案。
Ps:在 catalina.out 中我得到了这个错误。
org.apache.catalina.LifecycleException: Protocol handler initialization failed
at org.apache.catalina.connector.Connector.initInternal(Connector.java:1077)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
at org.apache.catalina.core.StandardService.initInternal(StandardService.java:557)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:850)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
at org.apache.catalina.startup.Catalina.load(Catalina.java:639)
at org.apache.catalina.startup.Catalina.load(Catalina.java:662)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:305)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:475)
Caused by: java.lang.IllegalArgumentException: /opt/tomcat/tomcat.keystore (Permission denied)
at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:100)
at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:72)
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:247)
at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1147)
at org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:222)
at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:599)
at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:80)
at org.apache.catalina.connector.Connector.initInternal(Connector.java:1074)
【问题讨论】:
-
启动服务器后有没有看到tomcat进程在运行?你能从你的 catalina.out 和 catalina.log 文件中发布任何相关信息吗?向我们展示您用于生成密钥库文件的命令?您希望我们如何在没有任何信息的情况下解决此问题?
-
您也创建了密钥库,但您导入了什么?您是否生成了 CSR?
-
@ChrisMaggiulli 我更新了问题。你能看看吗?
-
什么用户和组拥有tomcat及其文件?哪个用户和组拥有密钥库?密钥库上的权限位是什么?可以试试
chmod 400 /opt/tomcat/tomcat.keystore -
@ChrisMaggiulli 感谢您的指导。这是 /opt/tomcat 的权限问题。
标签: ssl tomcat https server.xml