OPENSSL
以下都是我自己常用的指令,詳細資訊可以將關鍵字餵Google大神
Copy 測試連線:
openssl s_client -showcerts -connect localhost:9092
產生證書及私鑰
openssl req -x509 -new -nodes -sha256 -utf8 -days 356 -newkey rsa:2048 -keyout server.key -out server.crt -config ssl.cnf
openssl req -x509 -new -nodes -sha256 -utf8 -days 3650 -newkey rsa:2048 -keyout server.key -out server.crt -config ssl.conf
產生PKCS12金鑰儲存庫
openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt
Copy // ssl.cnf
[req]
prompt = no
default_md = sha256
default_bits = 2048
distinguished_name = dn
x509_extensions = v3_req
[dn]
C = TW
ST = Taiwan
L = Taipei
O = Caster Inc.
OU = IT Department
emailAddress = admin@example.com
CN = localhost
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = *.localhost
DNS.2 = localhost
IP.1 = 127.0.0.1f
Keytool
以下都是我自己常用的指令,詳細資訊可以將關鍵字餵Google大神
Copy 查看keystore所有資訊:
keytool -list -v -keystore localSocketio.jks -storepass 123456
刪除項目:
keytool -delete -alias c1 -keystore localSocketio.jks -storepass 123456
導出證書:
keytool -export -alias localcertpem -keystore localSocketio.jks -file c1.crt -rfc -storepass 123456
查看證書內容:
keytool -printcert -file c1.crt
導入證書
keytool -importcert -trustcacerts -alias c1 -file c1.crt -keystore localSocketio.jks -storepass 123456
導入PKCS12金鑰儲存庫 to JKS
keytool -importkeystore -deststorepass 123456 -destkeypass 123456 -destkeystore localSocketio.jks -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass 123456
macOS:
將自簽憑證加入本機信任庫
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain c1.crt
Create Self signed certificate 流程
init keystore
Copy keytool -keystore testtls.jks -genkey -alias local -storepass 123456
2. 清空keystore
Copy keytool -delete -alias local -keystore testtls.jks -storepass 123456
3. 確認keystore 內容
Copy keytool -list -v -keystore testtls.jks -storepass 123456
#out put:
# 金鑰儲存庫類型: PKCS12
# 金鑰儲存庫提供者: SUN
# 您的金鑰儲存庫包含 0 項目
Create certificate
init key config (ssl.cnf) 利用上述說的 ssl.cnf 去設置
Copy openssl req -x509 -new -nodes -sha256 -utf8 -days 356 -newkey rsa:2048 -keyout server.key -out server.crt -config ssl.cnf
3. 產生PKCS12金鑰儲存庫
Copy openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt
4. 導入PKCS12金鑰儲存庫 to JKS
Copy keytool -importkeystore -deststorepass 123456 -destkeypass 123456 -destkeystore tlslocaltest.jks -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass 123456
5. 導入證書進入keystore 信任庫
Copy keytool -importcert -trustcacerts -alias localtest -file server.crt -keystore tlslocaltest.jks -storepass 123456
6. 將自簽憑證加入本機信任庫(mac OS版本) - 此動作會跳出電腦密碼驗證
Copy sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain server.crt
Bug 參考網址
JKS無法透過keytool放入私鑰
Believe or not, keytool does not provide such basic functionality like importing private key to keystore. You can try this workaround with merging PKSC12 file with private key to a keystore:
Copy keytool -importkeystore \
-deststorepass storepassword \
-destkeypass keypassword \
-destkeystore my-keystore.jks \
-srckeystore cert-and-key.p12 \
-srcstoretype PKCS12 \
-srcstorepass p12password \
-alias 1
Or just use more user-friendly KeyMan from IBM for keystore handling instead of keytool.
參考網址
轉換 PKCS12 to PEM
2023/12/19 - 追加轉換 PKCS12 to PEM 範例
生成測試用的 SSL key
使用 OpenSSL 工具生成一對包含私鑰和公鑰的測試 SSL 金鑰 (server.key
) 和憑證 (server.crt
)。
-x509
表示生成自簽名的憑證,-newkey rsa:2048
表示生成一個包含 RSA 2048 位金鑰的新憑證。
Copy openssl req -x509 -new -nodes -sha256 -utf8 -days 3650 -newkey rsa:2048 -keyout server.key -out server.crt
SSL key to PKCS12 檔案
使用 OpenSSL 工具將產生的 SSL 金鑰和憑證轉換成 PKCS12 格式的檔案 (server.p12
)。
-export
表示執行匯出操作,-inkey
和 -in
分別指定私鑰和憑證的輸入檔案。
Copy openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt
轉換 PKCS12 to PEM
使用 OpenSSL 工具將 PKCS12 格式的檔案轉換為 PEM 格式的檔案 (server.pem
)。
-nocerts
表示不包含憑證部分,-nodes
表示不加密私鑰,-out
指定輸出檔案。
Copy openssl pkcs12 -in server.p12 -nocerts -nodes -out server.pem