自動生成SSL證書的指令碼
阿新 • • 發佈:2018-10-31
自動生成SSL證書的指令碼
基於Lnux系統下的openssl
和jdkkeytool
工具
1. 指令碼和配置
1.1 生成https證書指令碼
#! /bin/bash
FILE_PREFIX=tls
RSA_BITS_NUM=2048
VALID_DAYS=3650
PASS_RSA=jeasoon
PASS_P12=jeasoon
PASS_JKS=jeasoon
CRT_ALIAS=jeasoon
CRT_COUNTRY_NAME=CN
CRT_PROVINCE_NAME=Beijing
CRT_CITY_NAME=Beijing
CRT_ORGANIZATION_NAME= jeasoon
CRT_ORGANIZATION_UNIT_NAME=jeasoon
CRT_DOMAIN=*.jeasoon.com
CRT_EMAIL=[email protected]
CRT_EXTRA_CHALLENGE_PASSWD=jeasoon
CRT_EXTRA_OPTINAL_COMPANY_NAME=Jeasoon
# 2.1 生成私鑰
echo -e "\n----------------------------------------------------------\n生成私鑰\n"
openssl genrsa -des3 -passout pass:$PASS_RSA -out $FILE_PREFIX.pem $RSA_BITS_NUM
# 2.2 除去密碼口令
echo -e "\n----------------------------------------------------------\n除去密碼口令\n"
openssl rsa -in $FILE_PREFIX.pem -out $FILE_PREFIX.key -passin pass:$PASS_RSA
# 2.3 生成證書請求
echo -e "\n----------------------------------------------------------\n生成證書請求\n"
openssl req -new -days $VALID_DAYS -key $FILE_PREFIX.key -out $FILE_PREFIX.csr << EOF
$CRT_COUNTRY_NAME
$CRT_PROVINCE_NAME
$CRT_CITY_NAME
$CRT_ORGANIZATION_NAME
$CRT_ORGANIZATION_UNIT_NAME
$CRT_DOMAIN
$CRT_EMAIL
$CRT_EXTRA_CHALLENGE_PASSWD
$CRT_EXTRA_OPTINAL_COMPANY_NAME
EOF
# 2.4 生成證書
echo -e "\n\n----------------------------------------------------------\n生成證書\n"
openssl x509 -req -days $VALID_DAYS -signkey $FILE_PREFIX.key -in $FILE_PREFIX.csr -out $FILE_PREFIX.crt
# 2.5 crt轉為p12證書
echo -e "\n----------------------------------------------------------\ncrt轉為p12證書\n"
openssl pkcs12 -export -in $FILE_PREFIX.crt -inkey $FILE_PREFIX.key -name $CRT_ALIAS -passout pass:$PASS_P12 -out $FILE_PREFIX.p12
# 2.6 p12和jks證書互轉
echo -e "\n----------------------------------------------------------\np12和jks證書互轉\n"
keytool -importkeystore -srckeystore $FILE_PREFIX.p12 -srcstoretype PKCS12 -deststoretype JKS -srcstorepass $PASS_P12 -deststorepass $PASS_JKS -destkeystore $FILE_PREFIX.jks
# 2.7 證書檢視
echo -e "\n----------------------------------------------------------\n證書檢視\n"
keytool -list -v -storepass $PASS_JKS -keystore $FILE_PREFIX.jks
echo
1.2 Tomcat配置
修改tomcat根目錄/conf/server.xml
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" >
<SSLHostConfig>
<Certificate certificateKeystoreFile="tls/tls.jks"
certificateKeystorePassword="jeasoon"
certificateKeyPassword="jeasoon"
certificateKeyAlias="jeasoon"
type="RSA" />
</SSLHostConfig>
</Connector>
2. 指令碼步驟詳解
2.1 生成私鑰
openssl genrsa -des3 -passout pass:密碼口令 -out tls.pem 2048
選項:
- genrsa: genrsa相關命令
- -des3: 加密方式, encrypt the generated key with DES in ede cbc mode (168 bit key)
- -passout: 輸出密碼口令, 後接
pass:密碼口令
, 如果省略, 需要手動輸入密碼口令 - -out: 輸出檔案路徑, 後接檔案路徑; 生成的tls.pem內容為文字
- 1024/2048: 1024/2048位私鑰, numbits
2.2 除去密碼口令
openssl rsa -in tls.pem -out tls.key -passin pass:密碼口令
選項:
- rsa: rsa相關命令
- -in: 第一步生成的pem私鑰, 後接私鑰檔案路徑
- -out: 輸出檔案路徑, 後接檔案路徑; 生成的tls.key內容為文字
- -passin: 輸入密碼口令, 後接
pass:密碼口令
, 如果省略, 需要手動輸入密碼口令
2.3 生成證書請求
openssl req -new -days 3650 -key tls.key -out tls.csr
選項:
- req: req相關命令
- -new: 生成新的證書籤名請求
- -days: 有效天數, 後接數字, 天數
- -key: 私鑰key路徑, 後接第二步生成的key路徑
- -out: 輸出檔案路徑, 後接檔案路徑; 生成的tls.csr內容為文字
互動輸入:
國家程式碼(可空): Country Name (2 letter code) [AU]:
CN
省份程式碼(可空): State or Province Name (full name) [Some-State]:
Beijing
城市程式碼(可空): Locality Name (eg, city) []:
Beijing
公司名稱(可空): Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Jeasoon
部門名稱(可空): Organizational Unit Name (eg, section) []:
Jeasoon
授權域名: Common Name (e.g. server FQDN or YOUR name) []:
*.jeasoon.com
郵件地址(可空): Email Address []:
[email protected]
Extra資訊(可空): A challenge password []:
jeasoon
Extra資訊(可空): An optional company name []:
jeasoon
2.4 生成證書
openssl x509 -req -days 3650 -signkey tls.key -in tls.csr -out tls.crt
選項:
- x509: x509相關命令
- -req: 輸入一個證書請求, 簽名並輸出
- -days: 有效天數, 後接數字, 天數
- -signkey: 輸入私鑰, 後接第二步生成的key檔案路徑
- -in: 輸入csr證書, 後接第三步生成的csr證書請求路徑
- -out: 輸出檔案路徑, 後接檔案路徑; 生成的tls.crt內容為文字
2.5 crt轉為p12證書
openssl pkcs12 -export -in tls.crt -inkey tls.key -name vixtel -passout pass:密碼口令 -out tls.p12
選項:
- pkcs12: pkcs12相關命令
- -export: 匯出操作
- -in: 輸入證書, 後接第四步生成的crt證書路徑
- -days: 有效天數, 後接數字, 天數
- -signkey: 輸入私鑰, 後接第二步生成的key檔案路徑
- -name: 別名
- -passout: 輸出密碼口令, 後接
pass:密碼口令
, 如果省略, 需要手動輸入密碼口令 - -out: 輸出檔案路徑, 後接檔案路徑; 生成的tls.p12內容為二進位制
2.6 p12和jks證書互轉
keytool為jdk工具
p12 轉為 jks:
keytool -importkeystore -srckeystore tls.p12 -srcstoretype PKCS12 -deststoretype JKS -srcstorepass 輸入密碼口令 -deststorepass 輸出密碼口令 -destkeystore tls.jks
jks 轉為 p12:
keytool -importkeystore -srckeystore tls.jks -srcstoretype JKS -deststoretype PKCS12 -srcstorepass 輸入密碼口令 -deststorepass 輸出密碼口令 -destkeystore tls.p12
選項:
- -importkeystore: 匯入證書並輸出指定證書
- -srckeystore: 輸入證書路徑, 後跟輸入證書路徑
- -destkeystore: 輸出證書路徑, 後跟輸出證書路徑
- -srcstoretype: 輸入證書型別, 後跟輸入證書型別, PKCS12/JKS
- -deststoretype: 輸出證書型別, 後跟輸出證書型別, JKS/PKCS12
- -srcstorepass: 輸入密碼口令, 後接輸入證書的密碼口令
- -deststorepass: 輸出密碼口令, 後接輸出證書的密碼口令
2.7 證書檢視
keytool -list -v -storepass 密碼口令 -keystore tls.jks
選項:
- -list: 證書更改或檢視操作
- -v: 詳細輸出
- -storepass: 證書密碼口令
- -keystore: 證書路徑, 後跟要檢視的證書路徑
互動輸出:
Keystore type: jks
Keystore provider: SUN
Your keystore contains 1 entry
Alias name: jeasoon
Creation date: Oct 30, 2018
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: [email protected], CN=*.jeasoon.com, O=Vixtel, L=Beijing, ST=Beijing, C=CN
Issuer: [email protected], CN=*.jeasoon.com, O=Vixtel, L=Beijing, ST=Beijing, C=CN
Serial number: d561956d9762442a
Valid from: Tue Oct 30 17:18:37 CST 2018 until: Fri Oct 27 17:18:37 CST 2028
Certificate fingerprints:
MD5: 28:82:FC:F2:05:DB:BD:7F:9A:30:3B:DC:92:0A:AF:BE
SHA1: 62:EC:7A:D5:7A:4B:1C:67:A9:04:FD:8B:B7:4C:5E:9F:D4:7B:0A:8F
SHA256: 15:20:DA:E2:0D:07:05:99:4F:5F:9C:AA:CF:8F:B3:68:E2:79:27:52:2E:34:52:7C:D5:F6:0E:5E:55:A6:5B:0F
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 1
*******************************************
*******************************************