SSL/TLS工具

OPENSSL

以下都是我自己常用的指令,詳細資訊可以將關鍵字餵Google大神

測試連線:
	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
// 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大神

查看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

  1. 建立一個keystore

keytool -keystore testtls.jks -genkey -alias local -storepass 123456

2. 清空keystore

keytool -delete -alias local -keystore testtls.jks -storepass 123456

3. 確認keystore 內容

keytool -list -v -keystore testtls.jks -storepass 123456
#out put:
# 金鑰儲存庫類型: PKCS12
# 金鑰儲存庫提供者: SUN
# 您的金鑰儲存庫包含 0 項目

Create certificate

  1. init key config (ssl.cnf) 利用上述說的 ssl.cnf 去設置

  2. 生成一對密鑰及證書

openssl req -x509 -new -nodes -sha256 -utf8 -days 356 -newkey rsa:2048 -keyout server.key -out server.crt -config ssl.cnf

3. 產生PKCS12金鑰儲存庫

openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt

4. 導入PKCS12金鑰儲存庫 to JKS

keytool -importkeystore -deststorepass 123456 -destkeypass 123456 -destkeystore tlslocaltest.jks -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass 123456

5. 導入證書進入keystore 信任庫

keytool -importcert -trustcacerts -alias localtest -file server.crt -keystore tlslocaltest.jks -storepass 123456

6. 將自簽憑證加入本機信任庫(mac OS版本) - 此動作會跳出電腦密碼驗證

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:

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 範例

  1. 生成測試用的 SSL key

    • 使用 OpenSSL 工具生成一對包含私鑰和公鑰的測試 SSL 金鑰 (server.key) 和憑證 (server.crt)。

    • -x509 表示生成自簽名的憑證,-newkey rsa:2048 表示生成一個包含 RSA 2048 位金鑰的新憑證。

    openssl req -x509 -new -nodes -sha256 -utf8 -days 3650 -newkey rsa:2048 -keyout server.key -out server.crt
  2. SSL key to PKCS12 檔案

    • 使用 OpenSSL 工具將產生的 SSL 金鑰和憑證轉換成 PKCS12 格式的檔案 (server.p12)。

    • -export 表示執行匯出操作,-inkey-in 分別指定私鑰和憑證的輸入檔案。

    openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt
  3. 轉換 PKCS12 to PEM

    • 使用 OpenSSL 工具將 PKCS12 格式的檔案轉換為 PEM 格式的檔案 (server.pem)。

    • -nocerts 表示不包含憑證部分,-nodes 表示不加密私鑰,-out 指定輸出檔案。

    openssl pkcs12 -in server.p12 -nocerts -nodes -out server.pem

Last updated