【发布时间】: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 available,No 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