我正在開發一個在 Glassfish 上與 Jersey 一起運行的 REST 服務器,我想讓它在本地主機上的 HTTPS 上運行。
我發現了許多生成 CA 證書的教程,其他生成 .cer / .crt / .key / .csr / ... 檔案的教程,其他生成 jks 密鑰庫的教程。
但他們沒有回答我的(非常基本的)問題:如何生成自簽名證書并在我的本地主機上運行在 Glassfish 上的應用程式中使用它?從零開始到真正使用的集成,沒有任何 prerequiresite 有 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
uj5u.com熱心網友回復:
共同目標
在本地使用 SSL 運行會很有用,我喜歡從真實世界的 URL 開始。這也可以幫助您提前考慮您的生產部署設計,這些天通常涉及基于自頒發的根 CA 的私有 PKI。
如今,Web 域和 API 域有時可能是相關的,例如,如果 API 為 Web 源發布安全 cookie。因此,對于本地主機開發,我首先定義如下 URL:
- https://api.mycompany.com
- https://web.mycompany.com
開發者設定
然后將這樣的條目添加到我的主機檔案中:
127.0.0.1 localhost web.mycompany.com api.mycompany.com
:1 localhost
然后,在證書方面,我生成這些可部署檔案:
| 證書 | 檔案名 | 用法 |
|---|---|---|
| 根CA | 我的公司.ca.pem | Java 運行時信任的根證書頒發機構 |
| 通配符證書 | 我的公司.ssl.p12 | 使用 API 部署的受密碼保護的 PKCS12 檔案 |
My 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 開發證書的資源,完成了架構作業:
- 我的開發人員 SSL 博客文章
- 我的Java API使用上述證書并通過此代碼加載通配符證書,其中 P12 檔案用作密鑰庫:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/401306.html
