【问题标题】:Create a self signed certificate for localhost and import it in Glassfish为 localhost 创建一个自签名证书并将其导入 Glassfish
【发布时间】:2022-01-22 18:33:10
【问题描述】:

我正在开发一个在 Glassfish 上与 Jersey 一起运行的 REST 服务器,我想让它在 localhost 上的 HTTPS 上运行。

我找到了许多生成 CA 证书的教程,其他生成 .cer / .crt / .key / .csr / ... 文件的教程,还有生成 jks 密钥库的教程。

但他们没有回答我的(非常基本的)问题:如何生成自签名证书并在我的本地主机上运行 Glassfish 的应用程序中使用它? 从头开始到实际使用的集成,无需任何具有 crt、jks 或任何其他文件的先决条件。

(关于我使用 Linux 的信息)

谢谢

编辑:我终于用以下命令创建了一个证书

openssl req -x509 -out localhost.crt -keyout localhost.key \
  -newkey rsa:2048 -nodes -sha256 \
  -subj '/CN=localhost' -extensions EXT -config <( \
   printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
openssl pkcs12 -export -name localhostServerCert -in localhost.crt -inkey localhost.key -out localhostP12Keystore.p12
keytool -importkeystore -destkeystore localhostKeystore.jks -srckeystore localhostP12Keystore.p12 -srcstoretype pkcs12 -alias localhostServerCert
copy localhostKeystore.jks into /glassfish/domains/domain1/config
keytool -importkeystore -srckeystore localhostKeystore.jks -destkeystore keystore.jks

我已经在管理控制台中修改了 http-listener-2 证书昵称 localhostServerCert,但在 https://localhost:8181 (ERR_CONNECTION_REFUSED) 上出现错误页面

编辑2:我认为证书应该有问题,因为openssl s_client -showcerts -connect localhost:8181返回no peer certificate availableNo client certificate CA names sent

【问题讨论】:

  • 你看过sectigo.com/resource-library/…教程吗。 Glassfish 是一个 Java 服务器。 Java 使用 JKS 存储 ssl 密钥。您必须生成一个密钥并将其存储在 JKS 中,然后在启用 https 时指向它。 docs.oracle.com/cd/E19798-01/821-1841/gjrgy
  • @Yan 是的,这通常是我不喜欢的那种教程。他们没有解释 crt 文件来自哪里(addtrustexternalcaroot.crt、XYZRSAAddTrustCA.crt、XYZRSADomainValidationSecureServerCA.crt)
  • 您实际上并不需要将根证书和中间 CA 证书导入您的信任库,因为您正在进行本地测试,并且在浏览器中显示证书无效时只会批准连接
  • 我认为你只需要通过keytool -genkey -alias server-alias -keyalg RSA -keypass changeit -storepass changeit -keystore keystore.jks创建JKS然后安装它
  • @Yan 好吧,我已经在 glassfish 域配置文件夹中执行了你的 cmd 行,然后我在管理控制台中编辑了端口和别名,并在 domain.xml 中用我自己的别名替换了 s1as 但它似乎不起作用(网站无法访问)。此外,关于 CA 证书,我还将使用 Insomnia 和 React 应用程序访问我的 REST 端点。

标签: ssl glassfish keystore self-signed-certificate glassfish-5


【解决方案1】:

共同目标

在本地使用 SSL 运行会很有用,我喜欢从真实世界的 URL 开始。这也可以帮助您提前考虑您的生产部署设计,如今这通常涉及基于自发行根 CA 的私有 PKI。

如今,Web 和 API 域有时可能相关,例如,如果 API 为 Web 源发布安全 cookie。因此,对于 localhost 开发,我首先定义如下 URL:

开发者设置

然后将这样的条目添加到我的主机文件中:

127.0.0.1 localhost web.mycompany.com api.mycompany.com
:1        localhost

然后,就证书而言,我生成了这些可部署的文件:

Certificate Filename Usage
Root CA mycompany.ca.pem The root certificate authority that is trusted by the Java runtime
Wildcard Certificate mycompany.ssl.p12 A password protected PKCS12 file deployed with the API

我的Development Certificates Repository 有一个如何使用 openssl 颁发证书的示例,包括一个可用于您自己的域的 bash 脚本。本质上,这是用于开发计算机的私有 PKI。

配置信任

然后,您只需信任 Glassfish 使用的 Java 运行时中的根 CA。就我个人而言,我倾向于尽可能避免使用 JKS 文件,因为它们是 Java 特有的,而 PKCS12 文件是一个更便携的概念:

sudo "$JAVA_HOME/bin/keytool" -import -alias mycompanyroot -cacerts -file ~/Desktop/mycompany.ca.pem -storepass changeit -noprompt

更多开发者设置信息

下面提供了以可移植方式管理 SSL 开发证书的这些资源,从而完成了架构工作:

System.setProperty(
  "server.ssl.key-store", 
  configuration.getApi().getSslCertificateFileName());

System.setProperty(
  "server.ssl.key-store-password",
  configuration.getApi().getSslCertificatePassword());

玻璃鱼

如果基于 Glassfish 的设置意味着 API 本身不会加载 PKCS12 文件,则可能存在导入 PKCS12 文件的特定任务。许多系统提供用于将 PKCS12 文件加载到密钥库中的 GUI 或 API 选项。这可能会导致运行这样的命令,如果需要,您可以手动执行:

keytool -importkeystore -srckeystore mycompany.ssl.p12 -srcstoretype pkcs12 -destkeystore keystore.jks -deststoretype jks -v

【讨论】:

    猜你喜欢
    • 2011-12-31
    • 1970-01-01
    • 2013-01-24
    • 2014-02-19
    • 2012-07-19
    • 1970-01-01
    • 2017-12-12
    • 2014-04-07
    • 1970-01-01
    相关资源
    最近更新 更多