如何在GlassFish上安装SSL证书

发布时间:2017/9/17 14:11:04 打印 字号:

激活并发布证书后,您可以继续在GlassFish上进行安装。

由于GlassFish使用密钥库(.jks 文件),所以在安装之前,需要使用相应的私钥将证书文件导入到密钥库中。为此,您需要找到用于生成CSR的密钥库。此密钥库是唯一一个包含您的证书私钥的密钥库。如果您无法检索密钥库,则需要使用新的密钥库重新颁发证书

证书文件可以从您的Gworg.com帐户下载或从Comodo发送的电子邮件中检索。从您的帐户下载的.zip存档将包含PEM格式(.crt和.ca-bundle文件)以及PKCS#7格式(.p7b)中的证书和CA软件包。我们建议导入PKCS#7格式的证书文件(.p7b / .cer),因为此过程更简单; 但是,它们也可以在PEM中输入。

导入证书

证书文件应该上传到您的服务器,以便将它们导入到密钥库中。仅以下列格式之一导入证书即可。

- PKCS#7(.p7b,.cer)

在PKCS#7中导入证书是通过一个命令完成的:

keytool -import -trustcacerts -alias myalias -file file.p7b -keystore mykeystore .jks

系统将提示您输入创建密钥库时设置的密钥库密码。myalias 值应该是最初设置了密钥库相同的别名。您可以使用以下命令查看别名:keytool -list -v -keystore mykeystore.jks

以下是一个示例导入的屏幕截图:

1-2.png

- PEM(.crt,.ca-bundle)

在PEM中导入证书文件需要先导入CA证书(.ca-bundle文件),然后导入证书本身。如果您没有.ca-bundle文件,可以从gworg.com帐户下载它。

可以使用以下命令导入CA捆绑包:

keytool -import -trustcacerts -alias ca -file file.ca-bundle -keystore mykeystore .jks

用于导入CA捆绑包的别名可以是任何名称,但必须与密钥库的别名不同。

导入CA软件包时,可以使用以下命令导入证书:

keytool -import -trustcacerts -alias myalias -file file.crt -keystore mykeystore .jks

这里别名必须与密钥库别名相同。以下屏幕截图说明了PEM中证书文件的导入过程:

2.png

安装

当密钥库已准备就绪,就应该将其导入到默认GlassFist密钥库,可在以下位置找到:glassfish4 / GlassFish实现/域/ domain1的/config/keystore.jks

domain1 是GlassFish创建的默认域。如果您已向GlassFish添加新域,则应该使用相应的目录名称。

以下命令用于将一个密钥库导入另一个密钥库:

keytool -importkeystore -srckeystore mykeystore .jks -destkeystore keystore.jks

系统将提示您输入两个密钥库的密码,从目标密钥库keystore.jks开始GlassFish密钥库的密码与域的GlassFish主密码相同; 默认情况下,它是changeit 根据您用于导入的证书格式,将有不同数量的导入条目。如果您对密钥库和私钥使用了不同的密码,则还需要输入私钥密码。

注意:要使证书在GlassFish上运行,域的GlassFish主密码,密钥库密码和私钥密码都必须相同如果其中一个密码与其他密码不匹配,请参阅最后的故障排除部分进行更改。

您将收到一份确认说明导入成功的情况,如下所示:

3.png

导入密钥库后,需要更新GlassFish配置以开始使用新证书。这可以使用GlassFish管理控制台完成,也可以通过手动更新domain.xml文件中的配置来完成。

 

Web界面(GlassFish管理控制台)

要远程访问GlassFish管理控制台,首先需要为域启用安全管理功能。这可以通过使用以下命令完成:asadmin enable-secure-admin example.com

一旦启用,您可以通过https://example.com:4848访问管理控制台您将需要绕过默认情况下安装在GlassFish上的自签名证书给出的证书警告。


要通过GlassFish管理控制台启用证书,请进入以下菜单:配置> server-config> HTTP服务> HTTP侦听器> http-listener-2

4.png

切换到“SSL”选项卡,输入您的证书别名myalias 作为证书NickName ,然后单击“保存”:

5.png

HTTPS的默认GlassFish端口是8181; 你可能想在“常规”选项卡中将其更改为通常的443:

6.png


通过转到HTTP侦听器>管理侦听器,可以以相同方式为GlassFish管理控制台安装证书。

 

有可能不是所有的配置引用都会更新为新的别名。在这种情况下,需要在domain.xml中手动更新它们。

 

编辑domain.xml

您可以使用适当的证书别名和端口手动编辑domain.xml配置文件,而不使用Web界面(GlassFish管理控制台)。该文件位于glassfish4 / glassfish / domains / domain1 / config / domain.xml中

在打开文件之前,我们建议使用以下命令停止此域的GlassFish服务:asadmin stop-domain example.com

用您喜欢的文本编辑器打开文件,找到对s1as的引用,这是GlassFish使用的默认证书别名。为s1as应改为myalias ,我们的证书别名。

如果该文件包含对端口8181的引用,则还可以将它们更新为443:

7.png

如果所有别名都更新为别名,则还将为GlassFish管理控制台安装证书。

保存更改到domain.xml并启动域:asadmin start-domain example.com:

8.png

这将完成安装,现在可以通过HTTPS访问域。

您可以使用此工具来检查证书安装:https://decoder.link/sslchecker



可选配置

 

使用您自己的密钥库

您可以编辑domain.xml来引用自己的密钥库,而不是将密钥库导入默认的GlassFish密钥库keystore.jks。与上面的编辑类似,所有对keystore.jks的引用都需要用您的mykeystore .jks 密钥库文件名替换在这种情况下,您的个人密钥库应该放在与默认密钥库相同的目录中:

9.png

重定向到HTTPS

将所有HTTP流量重定向到HTTPS,打开 default-web.xml (或者您的Web.xml文件,如果您有一个)位于域配置目录中 glassfish4/glassfish/domains/domain1/config 并在下面添加以下内容 <web-app> … </web-app>:

 <security-constraint>

   <web-resource-collection>

     <web-resource-name>Viewpoint Secure URLs</web-resource-name>

     <url-pattern>/*</url-pattern>

   </web-resource-collection>

   <user-data-constraint>

     <transport-guarantee>CONFIDENTIAL</transport-guarantee>

   </user-data-constraint>

 </security-constraint>

它可能是什么样子的一个例子:

10.png

保存更改并重新启动域- 这将完成设置。



故障排除

 

本节涵盖安装期间可能遇到的几个或多或少的常见错误,检查错误以及密码更改的准则。

错误

keytool错误:java.io.IOException:密钥库被篡改,或者密码不正确

如果输入的密钥库密码或私钥密码不正确,则在使用密钥库执行任何操作期间将显示此密钥工具错误。

如果您不记得密码,不幸的是,无法恢复它,您将需要创建一个新的密钥库。

keytool错误:java.lang.Exception:无法建立应答链

当密钥库不具有建立完整链所需的中间证书(或称为CA包)时,会发生上述错误。确保您首先导入了CA捆绑证书,或者更好地尝试导入PKCS#7中的证书。

有一个进程正在使用管理端口4848--它可能是另一个GlassFish服务器实例。命令启动域失败

如果在显示此错误时无法启动域,则需要手动终止java进程。首先,运行这个命令来查找进程:sudo netstat -ntulp 

11.png

复制在GlassFish端口上运行的java的PID(上图中的15780),然后运行以下命令来终止进程:kill15780

您现在可以使用通常的asadmin命令启动域。

 

检查错误/调试

如果您在使用HTTPS连接时遇到任何问题,则需要检查服务器日志中是否存在错误,该错误位于glassfish4 / glassfish / domains / domain1 /logs/server.log中

这将包含有关SSL错误的足够信息; 但是,如果感觉不够,可以通过在<java-config> 部分中添加以下JVM选项来将调试级别设置为domain.xml中的SSL <jvm-options>-Djavax.net.debug=SSL</jvm-options>

13.png

检查密钥库

您可以使用以下命令检查密钥库的内容:

keytool -list -keystore mykeystore .jks

这将为您提供密钥库中所有条目的简短列表。要获得每个条目的更多信息(例如,它包含多少证书,或者是否有私钥),可以添加-v标志:

keytool -list -v -keystore mykeystore .jks

在下面的例子中,keystore example.jks只包含一个带有私钥的条目:

14.png

更改密码

要使证书起作用,域的GlassFish主密码,密钥库密码和私钥密码都必须相同。如果它们不是,您将在HTTPS连接和服务器日志中收到各种错误。要确保所有三个密码都相同,可以使用下面的命令来更改它们。


GlassFish域主密码
GlassFish主密码默认为“changeit”,可以使用asadmin的change-master-password子命令进行

更改asadmin change-master-password domain1

15.png

密钥库密码
可以使用以下keytool命令更改密钥库的密码

keytool -storepasswd -keystore mykeystore.jks

16.png

- 私钥密码
使用此命令可以更改密钥库中私钥的密码:

keytool -keypasswd -alias myalias -keystore mykeystore.jks

17.png

来源

有关进一步阅读,请参阅下面列出的文档:

Keytoolhttps//docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html

GlassFish文档https//javaee.github.io/glassfish/documentation

GlassFish管理指南https//javaee.github.io/glassfish/doc/4.0/administration-guide.pdf

GlassFish安全指南https//javaee.github.io/glassfish/doc/4.0/security-guide.pdf