天天看點

使用Openssl簽發SSL證書

本文主要記述在Linux系統上使用Openssl建立SSL證書的流程,作為個人學習筆記。自簽名證書分為自簽名私有證書和自簽名CA憑證兩種。自簽名私有證書無法被吊銷,自簽名CA憑證可以被吊銷。

什麼是openssl

OpenSSL為網絡通信提供安全及資料完整性的一種安全協定,囊括了主要的密碼算法、常用的密鑰和證書封裝管理功能以及SSL協定,并提供了豐富的應用程式供測試或其它目的使用;openssl隻是OpenSSL開源套件中的多功能指令工具;

OpenSSL套件的組成部分有:

1.libcrypto:通用功能的加密庫;

2.libssl:用于實作TSL/SSL功能的庫;

3. openssl:多功能指令工具。

生成自簽名私有證書

1. 生成證書私鑰(Key)

openssl genrsa -out /path/keyfile 2048
           
使用Openssl簽發SSL證書

如果想對已生成的私鑰加密:(以下指令是使用DES3加密)

openssl rsa -in /path/keyfile -des3 -out /path/encrypted.key
           
使用Openssl簽發SSL證書

也可以在生成時直接加密(以下例子使用AES256)

openssl genrsa 加密方式 -out /path/keyfile 2048
           
使用Openssl簽發SSL證書

2. 生成證書請求檔案(Certificate Sign Request)

openssl req -new -key /path/keyfile -out /path/csrfile
           
使用Openssl簽發SSL證書
  • 在輸入域名時,需要多加注意,填寫的域名必須是你要https方式通路的那個域名。如abc.com 或 web.abc.com, abc.com 和web.abc.com,www.abc.com都是不同的域名。
  • 在輸入資訊時,不要出現任何特殊字元,如:(~,%,^,$,@,#,&,!,等)。

3. 自簽名,生成私有證書(Certificate)

openssl x509 -req -in /path/csrfile.csr -signkey /path/keyfile.key -out /path/ssl.crt
           
使用Openssl簽發SSL證書

4. 指令合并

從生成私鑰到自簽名,生成私有證書,可以合并成一條指令:

openssl req -new -x509 -newkey rsa:2048 -keyout /path/server.key -out /path/server.crt
           
使用Openssl簽發SSL證書

5. 檢視證書資訊

openssl x509 -in /path/certfile -noout -text
           
使用Openssl簽發SSL證書
  • 以上例子中,檔案夾為個人随意建立的,有些不妥,沒有參考價值。

生成自簽名CA憑證

建立自簽 CA 證書,主要分為兩個部分: 建立CA 根證書及簽發證書。
           
1. 建立CA根證書
可以使用openssl建立CA,用來簽發證書,預設情況ubuntu和CentOS上都已安裝好openssl。CentOS 6.x 上有關ssl證書的目錄結構。
/etc/pki/CA/
		newcerts    存放CA簽署(頒發)過的數字證書(證書備份目錄)
		 private     用于存放CA的私鑰
		 crl         吊銷的證書
/etc/pki/tls/
		 cert.pem    軟連結到certs/ca-bundle.crt
		 certs/      該伺服器上的證書存放目錄,可以存放自己的證書和内置證書
		 		ca-bundle.crt    内置信任的證書
		  private    證書密鑰存放目錄
		  openssl.cnf    openssl的CA主配置檔案
           

可以在配置檔案中配置預設值,這樣就不用每次重新輸入了。非必須操作。以下是配置檔案可修改參數,都是原狀态,本人沒有修改。

default_md = default             # use public key default MD
default_md  = sha1
countryName_default  = XX
stateOrProvinceName_default = Default Province
localityName_default = Default City
0.organizationName_default = Default Company Ltd
           
  • 生成根證書密鑰(與上面基本相同)
openssl genrsa -aes256 -out /etc/pki/CA/private/cakey.pem 2048
           
使用Openssl簽發SSL證書
  • 生成根證書請求(與上面基本相同)
openssl req -new -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.csr
           
使用Openssl簽發SSL證書
  • 生成根證書
openssl x509 -days 3650 -in /etc/pki/CA/cacert.csr -req -signkey /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem
           
使用Openssl簽發SSL證書

2. 生成序列号和索引檔案

準備好序列号和索引檔案,不然以下操作會出錯,也可以在建立根證書前準備好

touch /etc/pki/CA/index.txt
echo 00 > /etc/pki/CA/serial
           
使用Openssl簽發SSL證書

3. 建立需要認證的伺服器證書

除路徑外其他操作同上

openssl genrsa -aes256 -out /etc/pki/tls/private/privkey.pem 2048
openssl req -new -key /etc/pki/tls/private/privkey.pem -out /etc/pki/tls/certs/domain_name.csr
           

4. 簽發證書

openssl ca -in domain_name.csr -out /etc/pki/tls/certs/domain_name.crt.pem -days 825
#如果不用系統自帶目錄結構,簽發證書的指令如下
openssl x509 -req -days 365 -in /path/csrfile.csr -CA /path/ca.crt -CAkey /path/ca.key -set_serial 01 -out /path/csrfile.crt
           
使用Openssl簽發SSL證書

在Nginx中使用證書

Nginx配置檔案如下設定

# HTTPS server
     server {
        listen       443 ssl http2 default_server;
        server_name  e-highwayapp.com;

        ssl_certificate      "/home/ds/nginx/server_certificates/ssl.globalsign.com.crt";
        ssl_certificate_key  "/home/ds/nginx/server_certificates/private.key";

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

        ssl_ciphers  HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP;
        ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }
           

用戶端證書配置

用戶端證書建立與服務端證書建立一緻。

在浏覽器内配置即可

使用Openssl簽發SSL證書

CA憑證的有效性驗證

openssl verify -CAfile /path/ca.crt /path/server.crt
           
使用Openssl簽發SSL證書

證書格式轉換

轉換為P12證書

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

吊銷證書

#擷取要吊銷的證書的serial
openssl x509 -in /path/x.crt -noout -serial -subject
#對比serial與subject 資訊是否與index.txt中的資訊一緻
#如果一緻,則可以吊銷證書
openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
#如果是第一次吊銷證書,需要指定吊銷的證書編号
echo 01 >/etc/pki/CA/crlnumber
#更新吊銷證書清單
openssl ca -gencrl -out /etc/pki/CA/crl.pem
#完成後,可檢視吊銷的證書清單
openssl crl -in /etc/pki/CA/crl.pem -noout -text
           

學習過程中參考了很多前輩文章:

https://www.jianshu.com/p/81dbcde4fd7c

https://qiita.com/ll_kuma_ll/items/13c962a6a74874af39c6#%E9%8D%B5%E4%BD%9C%E6%88%90

https://qiita.com/tarosaiba/items/2ec41280d72b2e98b3bf

https://qiita.com/tarosaiba/items/9fa3320b633e0f5e87b5#4-%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E5%81%B4%E3%81%AE%E8%A8%AD%E5%AE%9A

繼續閱讀