1. 程式人生 > >自動生成SSL證書的指令碼

自動生成SSL證書的指令碼

自動生成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


*******************************************
*******************************************