Я выполняю сервер человечности 14.04.
Я установил glassfish 4.1.
Я хочу получить доступ к консоли снаружи, таким образом, я сделал
asadmin --host localhost --port 4848 enable-secure-admin
После того вызова шага www.myhost.com:4848/console/
дает мне исключение безопасности в браузере из-за самоподписанного сертификата. Хорошо, это нормально. Я могу принять исключение, и все в порядке.
Теперь у меня есть startssl, сертифицированный для www.myhost.com.
Таким образом, я сделал
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
Но теперь asadmin start-domain
дает мне в журнале
[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]]
И мой сервер доступен на порте 8080, но не на ssl 8181 и 4848.
Наконец, после большого количества поисков я нашел решение, работающее на меня (, видят здесь )
Так, после новой установки, перейдите в /opt/glassfish4/glassfish/domains/domain1/connfig
и загрузите startssl сертификаты
wget https://www.startssl.com/certs/ca.pem
wget https://www.startssl.com/certs/sub.class1.server.ca.pem
Тогда concat те 2 сертификата с моим доменным сертификатом
cat mydomain.crt ca.pem sub.class1.server.ca.pem > all.crt
И импортируйте в cacerts
keytool -import -trustcacerts -alias mycert -file all.crt -keystore cacerts.jks
, Создают p12 файл с закрытым ключом
openssl pkcs12 -export -in all.crt -inkey mydomain.key -out mydomain.p12 -name mycert -CAfile ca.pem -caname immed
моего домена и импортируют в keystore
keytool -importkeystore -deststorepass changeit -destkeypass changeit -destkeystore keystore.jks -srckeystore mydomain.p12 -srcstoretype PKCS12 -srcstorepass changeit -alias mycert
и наконец изменяют весь s1as
случаи на mycert
в domain.xml
sed -i 's|s1as|mycert|' domain.xml
хорошо, теперь это работает, даже если я не понимаю то, что я делаю!
мое предложение не должно было бы удалять начальную букву s1as сертификат и заменять его Вашим собственным. имейте в виду, что существует другой cacerts.jks файл трапецеидального искажения, который должен быть в синхронизации... для чистой проверки установки glassfish этим здесь: https://www.nabisoft.com/tutorials/glassfish/installing-glassfish-41-on-ubuntu Мое учебное руководство говорит Вам также, как создать Ваше собственное (сам подписанный) s1as и glassfish-instace сертификат (это слишком длинно для регистрации его здесь).
После того импорта сертификат для Вашего домена в keystore.jks (при получении промежуточного сертификата из CA также тогда Вы, возможно, должны были бы импортировать это сначала). никакая потребность добавить Вас, сертификат доменов к cacerts.jks Удостоверяется, что изменил Ваш http-listener2 (=https), чтобы использовать Ваш псевдоним сертификата вместо s1as и перезапустить Glassfish., который должен работать...