我已经创建了一个自签名证书并将其添加到keystore.jks,但是一旦在http-listener-2中通过管理控制台进行了配置,它就无法正常工作。默认“s1as”证书正常运行。
服务器信息:
Install directory: C:\Program Files\glassfish-4.0\glassfish
Installed version: GlassFish Server Open Source Edition 4.0 (build 89)
我做了什么:
以管理员身份打开cmd
将keytool添加到PATH
set PATH=%PATH%;c:\Program Files\Java\jdk1.8.0_20\bin"
生成密钥
C:\Program Files\glassfish-4.0\glassfish\domains\domain1\config>keytool -keysize
2048 -genkey -alias autofirmado -keyalg RSA -keystore keystore.jks -validity 360
Introduzca la contraseña del almacén de claves:
¿Cuáles son su nombre y su apellido?
[Unknown]: Myname
¿Cuál es el nombre de su unidad de organización?
[Unknown]: test
¿Cuál es el nombre de su organización?
[Unknown]: test2
¿Cuál es el nombre de su ciudad o localidad?
[Unknown]: locality
¿Cuál es el nombre de su estado o provincia?
[Unknown]: province
¿Cuál es el código de país de dos letras de la unidad?
[Unknown]: es
¿Es correcto CN=Myname, OU=test, O=test2, L=locality, ST=province, C=es?
[no]: si
Introduzca la contraseña de clave para <autofirmado>
(INTRO si es la misma contraseña que la del almacén de claves): <ENTER>
验证新生成的密钥是否在keystore.jks
中C:\Program Files\glassfish-4.0\glassfish\domains\domain1\config>keytool -list -k
eystore keystore.jks -alias autofirmado -v
Introduzca la contraseña del almacén de claves:
Nombre de Alias: autofirmado
Fecha de Creación: 21-dic-2014
Tipo de Entrada: PrivateKeyEntry
...
然后配置http-listener-2:
alias: autofirmado
keystore: keystore.jks
truststore: cacerts.jks
然后重新启动服务器并尝试通过https localhost 8181访问,但我收到了firefox消息:
“连接被中断”
如果我使用默认的“s1as”键配置GlassFish服务器,它可以正常工作。
答案 0 :(得分:1)
由于我发现这个问题是由于另一个错误,我在这里写了一些在类似情况下出现问题的可能原因。
就是这个问题的情况。我Chrome我收到以下消息:
NET::ERR_CERT_AUTHORITY_INVALID
您必须设置 CN = localhost 才能使其正常运行。
What is your first and last name?
[Unknown]: localhost
这也在GlassFish安全指南中指定:
对于HTTPS主机名验证,务必确保证书(CN)的名称与站点的完全限定主机名(完全限定的域名)匹配。如果名称不匹配,连接到服务器的客户端将看到一个安全警报,指出证书的名称与站点名称不匹配。
我使用了keytool -genkey
命令而没有指定-keyalg
选项,这创建了一个SHA1withDSA
的证书。
Chrome说ERR_CONNECTION_CLOSED
并在我的服务器日志中找到了
javax.net.ssl.SSLHandshakeException: no cipher suites in common
我在指定 keytool -genkey -keyalg RSA
来自GlassFish安全指南:
DAS使用
s1as
别名进行SSL / TLS身份验证和 实例使用glassfish-instance
别名
根据对another answer&#34的评论;如果更改s1as证书,则还需要更改glassfish-instance证书&#34;。
请记住:
keystore.jks
文件包含GlassFish服务器证书,包括私钥。cacerts.jks
文件包含GlassFish Server受信任证书,包括其他实体的公钥。有时,分心会让你把公钥放在错误的文件中。这应该是正确的顺序:
# Generate a key pair in keystore.jks
keytool -genkeypair -alias s1as -keystore keystore.jks -keypass changeit -storepass changeit -keyalg RSA
# Export the certificate
keytool -export -keystore keystore.jks -alias s1as -file s1as.cer -storepass changeit
# Import it into the truststore.jks
keytool -import -noprompt -trustcacerts -file s1as.cer -alias s1as -keystore cacerts.jks -storepass changeit
此命令显示有关证书的信息:
keytool -v -list -alias <the_alias> -keystore <filename>.jks
如果您查看GlassFish提供的原始自签名证书,您可以:
Owner: CN=localhost
s1as
Owner: CN=localhost-instance
glassfish-instance
Signature algorithm name: SHA256withRSA
Entry type: PrivateKeyEntry
keystore.jks
Entry type: trustedCertEntry
cacerts.jks