自签名证书无法在GlassFish Server 4.0上运行

ale*_*lex 5 ssl certificate glassfish self-signed

我已经创建了一个自签名证书并将其添加到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)
Run Code Online (Sandbox Code Playgroud)

我做了什么:

以管理员身份打开cmd

将keytool添加到PATH

set PATH=%PATH%;c:\Program Files\Java\jdk1.8.0_20\bin"
Run Code Online (Sandbox Code Playgroud)

生成密钥

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>
Run Code Online (Sandbox Code Playgroud)

验证新生成的密钥是否在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
...
Run Code Online (Sandbox Code Playgroud)

然后配置http-listener-2:

alias: autofirmado
keystore: keystore.jks
truststore: cacerts.jks   
Run Code Online (Sandbox Code Playgroud)

然后重新启动服务器并尝试通过https localhost 8181访问,但我收到了firefox消息:

"连接被中断"

如果我使用默认的"s1as"键配置GlassFish服务器,它可以正常工作.

xon*_*nya 2

由于我由于另一个错误而发现了这个问题,因此我在这里写了类似情况下出现问题的一些可能原因。

证书名称错误

本题就是这样的情况。我用 Chrome 收到以下消息:

NET::ERR_CERT_AUTHORITY_INVALID
Run Code Online (Sandbox Code Playgroud)

您必须设置CN=localhost才能使其正常工作。

What is your first and last name?
  [Unknown]:  localhost
Run Code Online (Sandbox Code Playgroud)

GlassFish 安全指南中也对此进行了指定:

对于 HTTPS 主机名验证,确保证书名称 (CN) 与站点的完全限定主机名(完全限定域名)匹配非常重要。如果名称不匹配,连接到服务器的客户端将看到一条安全警报,指出证书名称与站点名称不匹配。

密钥算法错误

我使用该keytool -genkey命令时未指定-keyalg选项,这创建了一个带有SHA1withDSA.

Chrome 说ERR_CONNECTION_CLOSED,在我的服务器日志中我发现

NET::ERR_CERT_AUTHORITY_INVALID
Run Code Online (Sandbox Code Playgroud)

我解决了这个指定keytool -genkey -keyalg RSA

还更改 glassfish-instance 证书

来自 GlassFish 安全指南:

DAS 使用s1as别名进行 SSL/TLS 身份验证,实例使用glassfish-instance别名

根据另一个答案的评论“如果更改 s1as 证书,则还需要更改 glassfish-instance 证书”。

错误的密钥库文件

请记住:

  • keystore.jks文件包含 GlassFish Server 证书,包括其私钥
  • cacerts.jks文件包含 GlassFish Server 可信证书,包括其他实体的公钥。

有时,分心可能会使您将公钥放入错误的文件中。这应该是正确的顺序:

What is your first and last name?
  [Unknown]:  localhost
Run Code Online (Sandbox Code Playgroud)

如何检查

此命令显示有关证书的信息:

javax.net.ssl.SSLHandshakeException: no cipher suites in common
Run Code Online (Sandbox Code Playgroud)

如果您查看 GlassFish 提供的原始自签名证书,您会发现:

  • 中文:
    • Owner: CN=localhost为了s1as
    • Owner: CN=localhost-instance为了glassfish-instance
  • RSASignature algorithm name: SHA256withRSA
  • 条目类型
    • Entry type: PrivateKeyEntry为了keystore.jks
    • Entry type: trustedCertEntry为了cacerts.jks