Summary: I'm looking for ideas on how to resolve this "Address already
in use" error when configuring SSL in Tomcat APR.
Environment:
Running Apache Tomcat/6.0.24
on OS is Ubuntu 10.04.2 LTS
with JVM 1.7.0_01-b08
//
// Prior to configuring SSL, and after starting Tomcat I run "netstat
-tulpn" and see that port 8443 is not used:
//
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address
State PID/Program name
tcp 0 0 127.0.0.1:3306 0.0.0.0:*
LISTEN 29002/mysqld
tcp 0 0 0.0.0.0:22 0.0.0.0:*
LISTEN 2136/sshd
tcp6 0 0 127.0.0.1:8005 :::*
LISTEN 12796/java
tcp6 0 0 :::8080 :::*
LISTEN 12796/java
tcp6 0 0 :::22 :::*
LISTEN 2136/sshd
udp 0 0 0.0.0.0:68 0.0.0.0:*
2087/dhclient3
//
// I stop Tomcat, and add the following to my server.xml file:
//
<Listener className="org.apache.catalina.core.AprLifecycleListener"
SSLEngine="on" />
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150"
scheme="https"
secure="true"
clientAuth="false"
sslProtocol="TLS"
SSLEnabled="true"
SSLCertificateKeyFile="/etc/apache2/ssl/myUniqueDomain.com.key"
SSLCACertificateFile="/etc/apache2/ssl/myUniqueDomain.com.ca.crt" />
//
// I restart Tomcat, and see the following in the catalina.out file:
//
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:646)
at org.apache.tomcat.util.net.AprEndpoint.start(AprEndpoint.java:753)
at
org.apache.coyote.http11.Http11AprProtocol.start(Http11AprProtocol.java:137)
at org.apache.catalina.connector.Connector.start(Connector.java:1080)
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:593)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Nov 19, 2011 11:35:19 AM org.apache.catalina.startup.Catalina start
SEVERE: Catalina.start:
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:1087)
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:593)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
//
// Running "netstat -tulpn" I see that port 8443 is now being used:
//
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address
State PID/Program name
tcp 0 0 127.0.0.1:3306 0.0.0.0:*
LISTEN 29002/mysqld
tcp 0 0 0.0.0.0:22 0.0.0.0:*
LISTEN 2136/sshd
tcp6 0 0 127.0.0.1:8005 :::*
LISTEN 10696/java
tcp6 0 0 :::8080 :::*
LISTEN 10696/java
tcp6 0 0 :::22 :::*
LISTEN 2136/sshd
tcp6 0 0 :::8443 :::*
LISTEN 10696/java
udp 0 0 0.0.0.0:68 0.0.0.0:*
2087/dhclient3
If I change <Connector port="8443" to <Connector port="8445", I get
the same error message, and "netstat -tulpn" shows:
tcp6 0 0 :::8445 :::*
LISTEN 10696/java
I have also tried adding the following to my server.xml as an
attribute to "<Connector " and still get the same error:
SSLCertificateFile="/etc/apache2/ssl/domain.com.crt"
It appears as if adding a single connector for port 8443 in server.xml
is causing two to attempt to load, thus resulting in a conflict. I've
been searching and reading for two days, looking for ideas on how I
could take this analysis a step further... and am now asking for
ideas.
If it matters, I generated my OpenSSL certificate signing request for
a commercial SSL certificate via:
openssl req -newkey rsa:2048 -days 365 -nodes -keyout
myUniqueDomain.com.key -out myUniqueDomain.com.csr
Thanks, Eric Kemp
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]