我在尝试让启用 SSL 的应用程序在 tomcat 6.x 服务器上运行时遇到错误。 APR 已启用。
我这样创建了证书:
openssl genrsa -des3 -out key.pem 2048
passphrase
openssl req -new -x509 -key key.pem -out cert.pem -days 1095
passphrase
我的 ssl 配置如下所示:
<Connector protocol="org.apache.coyote.http11.Http11AprProtocol"
port="8444" minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
clientAuth="false" sslProtocol="TLS"
SSLCertificateFile="/usr/local/tomcat/conf/ssl/cert.pem"
SSLCertificateKeyFile="/usr/local/tomcat/conf/ssl/key.pem"
SSLPassword="passphrase"/>
/>
您可能会注意到端口不是标准的。这是因为我在这个系统上有两个独立的 tomcat 应用程序,它们都使用 SSL。我不认为这是问题所在,因为即使我关闭另一个 tomcat 并只运行有问题的 tomcat 实例,我也会得到同样的错误。
所以一个实例使用 8080/8443,而问题一个使用 8081/8444。
tomcat 的好实例总是完美运行。问题安装在没有 ssl 的情况下工作正常。我试过只运行问题实例,但我仍然遇到同样的问题,所以我认为问题与此无关,但我认为我应该披露。我还尝试在坏 key 上使用正常运行的 tomcat 的 ssl key 和证书,但仍然出现相同的错误,所以我认为也不是。
因此,我很困惑。
以下是我不断收到的错误:
SEVERE: Error initializing endpoint java.lang.Exception: Invalid Server SSL Protocol
at org.apache.tomcat.jni.SSLContext.make(Native Method)
at org.apache.tomcat.util.net.AprEndpoint.init(AprEndpoint.java:680)
at org.apache.coyote.http11.Http11AprProtocol.init(Http11AprProtocol.java:107)
LifecycleException: Protocol handler initialization failed: java.lang.Exception: Invalid Server SSL Protocol
at org.apache.catalina.connector.Connector.initialize(Connector.java:1060)
at org.apache.catalina.core.StandardService.initialize(StandardService.java:677)
at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:795)
at org.apache.catalina.startup.Catalina.load(Catalina.java:530)
SEVERE: Error starting endpoint
java.lang.Exception: Socket bind failed: [98] Address already in use
at org.apache.tomcat.util.net.AprEndpoint.init(AprEndpoint.java:612)
at org.apache.tomcat.util.net.AprEndpoint.start(AprEndpoint.java:717)
at org.apache.coyote.http11.Http11AprProtocol.start(Http11AprProtocol.java:137)
at org.apache.catalina.connector.Connector.start(Connector.java:1131)
at org.apache.catalina.core.StandardService.start(StandardService.java:531)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
LifecycleException: service.getName(): "Catalina"; Protocol handler start failed: java.lang.Exception: Socket bind failed: [98] Address already in use
at org.apache.catalina.connector.Connector.start(Connector.java:1138)
at org.apache.catalina.core.StandardService.start(StandardService.java:531)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
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.start(Bootstrap.java:288)
感谢帮助。
最佳答案
将标签中的协议(protocol)从“org.apache.coyote.http11.Http11AprProtocol”更改为“org.apache.coyote.http11.Http11NioProtocol”。并尝试一次
关于linux - 带 SSL 的 tomcat APR - 端口 98 已被使用/无效的服务器 SSL 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14150360/