exceção de handshake do console glassfish ssl

1

Estou executando o servidor 14.04 do Ubuntu.

Eu instalei o glassfish 4.1.

Eu quero acessar o console de fora, então eu fiz

asadmin --host localhost --port 4848 enable-secure-admin

Após essa etapa, a chamada www.myhost.com:4848/console/ está me dando uma exceção de segurança no navegador devido ao certificado autoassinado. Ok, é normal Eu posso aceitar a exceção e está tudo bem.

Agora tenho um startssl certificado para www.myhost.com.

Então eu fiz

keytool -delete -alias s1as -keystore keystore.jks
keytool -importcert -keystore keystore.jks -storepass changeit -file www.myhost.com.crt -alias s1as
keytool -importcert -keystore keystore.jks -storepass changeit -file ca.crt -alias startcom.ca -trustcacerts
keytool -importcert -keystore keystore.jks -storepass changeit -file sub.class1.server.ca.crt -alias startcom.ca.sub -trustcacerts

Mas agora asadmin start-domain me dá no log

[2015-02-20T09:55:58.021+0100] [glassfish 4.1] [SEVERE] [] [] [tid: _ThreadID=57 _ThreadName=Thread-9] [timeMillis: 1424422558021] [levelValue: 1000] [[
  java.io.IOException: Cannot bind to URL [rmi://www.myhost.com.be:8686/jmxrmi]: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
        javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure]
        at javax.management.remote.rmi.RMIConnectorServer.newIOException(RMIConnectorServer.java:826)
        at javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:431)
        at org.glassfish.admin.mbeanserver.RMIConnectorStarter.start(RMIConnectorStarter.java:319)
        at org.glassfish.admin.mbeanserver.JMXStartupService$JMXConnectorsStarterThread.startConnector(JMXStartupService.java:313)
        at org.glassfish.admin.mbeanserver.JMXStartupService$JMXConnectorsStarterThread.run(JMXStartupService.java:350)
Caused by: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
        javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure]
        at com.sun.jndi.rmi.registry.RegistryContext.rebind(RegistryContext.java:159)
        at com.sun.jndi.toolkit.url.GenericURLContext.rebind(GenericURLContext.java:249)
        at javax.naming.InitialContext.rebind(InitialContext.java:427)
        at javax.naming.InitialContext.rebind(InitialContext.java:427)
        at javax.management.remote.rmi.RMIConnectorServer.bind(RMIConnectorServer.java:641)
        at javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:426)
        ... 3 more
Caused by: java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
        javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
        at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:304)
        at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
        at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:341)
        at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
        at com.sun.jndi.rmi.registry.RegistryContext.rebind(RegistryContext.java:157)
        ... 8 more
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
        at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
        at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
        at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1979)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1086)
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332)
        at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:709)
        at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122)
        at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
        at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
        at java.io.DataOutputStream.flush(DataOutputStream.java:123)
        at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:229)
        ... 12 more]]

E meu servidor está acessível na porta 8080, mas não no ssl 8181 e 4848.

    
por tweetysat 20.02.2015 / 10:15

2 respostas

0

Por fim, depois de muitas pesquisas, encontrei uma solução funcionando para mim ( veja aqui )

Então, depois de uma nova instalação, vá para /opt/glassfish4/glassfish/domains/domain1/connfig e faça o download do startssl certs

wget https://www.startssl.com/certs/ca.pem
wget https://www.startssl.com/certs/sub.class1.server.ca.pem

Em seguida, concata esses dois certificados com meu certificado de domínio

cat mydomain.crt ca.pem sub.class1.server.ca.pem > all.crt

E importe em cacerts

keytool -import -trustcacerts -alias mycert -file all.crt -keystore cacerts.jks

Crie um arquivo p12 com a chave privada do meu domínio

openssl pkcs12 -export -in all.crt -inkey mydomain.key -out mydomain.p12 -name mycert -CAfile ca.pem -caname immed

e importação no keystore

keytool -importkeystore -deststorepass changeit -destkeypass changeit -destkeystore keystore.jks -srckeystore mydomain.p12 -srcstoretype PKCS12 -srcstorepass changeit -alias mycert

e, finalmente, alterar todas as s1as ocorrências por mycert em domain.xml

sed -i 's|s1as|mycert|' domain.xml

Ok, agora está funcionando mesmo que eu não entenda o que estou fazendo!

    
por tweetysat 03.03.2015 / 16:04
0

minha sugestão seria não excluir o certificado s1as inicial e substituí-lo pelo seu próprio. Tenha em mente que há outro arquivo de keystone cacerts.jks que deve estar em sincronia ... para uma instalação de glassfish limpa, verifique isso aqui: link Meu tutorial também informa como criar seus próprios certificados (auto-assinados) e glassfish-instace (é muito longo para postá-lo aqui).

Depois disso, importe o certificado para o seu domínio em keystore.jks (se você recebeu um certificado intermediário da sua CA também, talvez seja necessário importá-lo primeiro). não há necessidade de adicionar domínios certificados a cacerts.jks Certifique-se de alterar seu http-listener2 (= https) para usar seu alias de certificado em vez de s1as e reinicie o Glassfish. isso deveria funcionar ...

    
por Nabi 25.02.2015 / 09:31