SSL、TLS、HTTPS 、證書、CA


1.簡介

  官方文檔                                                  

SSL https://www.ssl.com/faqs/faq-what-is-ssl/
TLS

https://datatracker.ietf.org/group/tls/documents/ 

https://datatracker.ietf.org/doc/html/rfc8446  TLS 1.3

X.509

https://tools.ietf.org/html/rfc5280

HTTPS

https://https.cio.gov/

https://tools.ietf.org/html/rfc2818

 

    SSL(Secure Sockets Layer 安全套接字層協議),是用於在聯網計算機之間建立可靠鏈接的一種協議,這個可靠指的是 [ 經過身份驗證 和 加密 ]。ssl這個名字棄用於1999年。

  TLS(Transport Layer Security 傳輸層安全協議),於1999年發布,接替原SSL並改名為TLS,是一種認證和加密協議。 TLS 1.3在中定義 RFC 8446 .

  HTTPS    =   HTTP : 443 + TLS 

2.信息安全問題

  • 傳輸[雙]方身份的可靠性    --     使用數字證書解決
  • 信息的保密性               --     使用加密算法:對稱aes,des等; 非對稱:rsa
  • 信息的完整性                    --     散列算法(sha1、MD5等)生成摘要1與內容一起加密,另一方解密后得到摘要1和內容,使用相同散列算法對內容生成摘要2,對比摘要1與摘要2

3.CA、數字證書

3.1 驗證過程

  簡單情況下,服務端持有私鑰,然后把公鑰發給客戶端,后者使用公鑰就可以完成加密工作。

  但是,傳輸過程中數據可能被第3方劫持、冒充,在中間互相扮演對方。

  權威的認證機構(CA)可以解決這個問題。它用驗證對方數字證書的可靠性。過程大致如下:

  • 服務端去權威機構申請證書,填寫持有人、服務器地址等信息。
  • CA使用自己的私鑰對服務器信息加密生成數字證書,包含(證書內容,散列算法,加密密文,服務端的公鑰)。
  • 服務端得到數字證書后布置
  • 客戶端預先把可靠的CA公鑰列表存到本地。
  • 客戶端發請求,得到服務端數字證書后,用CA公鑰驗證證書合法性
  • 合法后,會從證書里得到服務端公鑰。
  • 加密傳輸

3.2 X.509 證書結構

  X.509 是一種公鑰證書 格式標准,是將加密密鑰對與網站、個人或組織等身份安全地關聯的數字文檔。見 RFC 5280 ,它的編碼格式主要有兩種: 

  • .DER 是二進制編碼,可包含所有私鑰、公鑰和證書,是大多數瀏覽器的缺省格式,常見於 Windows 系統中的證書格式。
  • .PEM 是文本格式的,  以 “-----BEGIN CERTIFICATE----- 開頭,已 -----END CERTIFICATE----- 結尾”, 中間是經過 base64 編碼的內容, Apache 和 NGINX 服務器偏向於使用這種編碼格式,也是 openssl 默認采用的信息存放方式。PEM 其實就是把 DER 的內容進行了一次 base64 編碼。

3.3 查看其它證書

執行命令:

openssl s_client -connect qq.com:443 | openssl x509 -text

結果如下

admin@jfie82o:~$ openssl s_client -connect qq.com:443 | openssl x509 -text
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = DigiCert Secure Site CN CA G3
verify return:1
depth=0 C = CN, ST = \E5\B9\BF\E4\B8\9C\E7\9C\81, L = \E6\B7\B1\E5\9C\B3\E5\B8\82, O = Shenzhen Tencent Computer Systems Company Limited, CN = qq.com
verify return:1
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            05:62:4d:f7:ef:6b:f9:d4:dd:21:ef:c1:69:19:5e:5d
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = US, O = DigiCert Inc, CN = DigiCert Secure Site CN CA G3
        Validity
            Not Before: Jul 26 00:00:00 2021 GMT
            Not After : Jul 26 23:59:59 2022 GMT
        Subject: C = CN, ST = \E5\B9\BF\E4\B8\9C\E7\9C\81, L = \E6\B7\B1\E5\9C\B3\E5\B8\82, O = Shenzhen Tencent Computer Systems Company Limited, CN = qq.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:e3:59:82:18:14:b3:4f:55:ec:1e:d5:bd:b1:3c:
                    14:78:f3:53:8c:b4:a2:c3:79:dc:1e:70:46:c8:6c:
                    44:a2:a8:6b:81:fc:1a:73:3c:91:b5:1b:b2:b9:17:
                    67:64:d4:6f:81:18:20:e6:a9:7c:f5:e3:49:22:ac:

    ...... 

3.4 申請數字證書

  ssl   https://www.ssl.com/certificates/basicssl/

 

  沃通

 

4.自簽名證書

  在測試、內部、私密等場景下,需要創建自簽名證書。 

資料:

  https://docs.azure.cn/zh-cn/articles/azure-operations-guide/application-gateway/aog-application-gateway-howto-create-self-signed-cert-via-openssl

4.1 生成服務器私鑰

openssl genrsa -out private.key 4096

在目錄下會生下 private.key

4.2 生成證書請求文件(CSR)

openssl req -new -key private.key -out test.csr

注意 Common Name 應輸入 域名(如video.test.com),最后在目錄下生成test.csr

4.3 簽發證書 

使用前面生成的兩個文件執行下面命令。

openssl x509 -req -days 365 -in test.csr -signkey private.key -out test.crt

生成test.crt

5.自建 CA 簽發服務器證書

  創建自簽 CA 證書,主要分為兩個部分:

  • 創建CA 根證書
  • 簽發客戶端證書。

5.1 創建CA根證書

第1步:創建 CA 目錄並初始化

mkdir -p ~/ssl/myca/{certs,newcerts,crl,private}

 

cd ~/ssl/myca
touch index.txt
echo "01" > serial

第2步:配置openssl.cnf 文件

把 CA 的配置文件(/etc/ssl/openssl.cnf) 拷貝到當前目錄,可以對其中的參數進行修改,如:

第3步:生成根證書

openssl req -new -x509 -newkey rsa:4096 -keyout cakey.key -out cacert.crt -config openssl.cnf -days 365

注意Common Name 應輸入 域名,如“audio.test.com”。結果如下:

 

  • 生成的 cacert.crt 是根證書
  • 生成的cakey.key 是證書的公鑰
  • 使用cat命令可把crt與key 合並成cer文件
    cat cacert.crt cakey.key > cacert.cer 

5.2 簽發證書

第1步:生成 4096 bit 的客戶端私鑰 

openssl genrsa -out client.key 4096

第2步:用該客戶端私鑰生成證書簽名請求文件

openssl req -new -key client.key -out client.csr -config openssl.cnf

第3步:使用 CA 根證書簽發客戶端證書

openssl ca -in client.csr -out client.crt -cert cacert.crt -keyfile cakey.key -config openssl.cnf

在當前目錄下生成了client.crt證書

5.3 證書轉換及查看

合並crt與key 成cer文件:

cat cacert.crt cakey.key > cacert.cer

把cacert.crt 轉為 DER:

openssl x509 -in cacert.crt -outform der -out cacert.der

把cacert.crt 轉為 PEM:

openssl x509 -in cacert.crt -outform pem -out cacert.pem

DER 轉為 PEM:

openssl x509 -in cert.crt -inform der -outform pem -out cacert.pem

轉成p12 :

openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
openssl pkcs12 -export -clcerts -in client2.crt -inkey client2.key -out client2.p12 

查看公鑰:

openssl rsa -noout -text -in cakey.key 

查看證書:

openssl x509 -noout -text -in cacert.crt

6.HTTPS 驗證過程

6.1 https 單向認證過程

 

其中第3步驗證的主要內容如下

  • 證書是否過期;
  • 發行服務器證書的CA是否可靠;(通過查詢瀏覽器或本機內的CA證書)
  • 返回的公鑰是否能正確解開返回證書中的數字簽名;
  • 服務器證書上的域名是否和服務器的實際域名相匹配; 

6.2 https 雙向認證過程

注意事項 :

  • 生成根公鑰證書和私鑰文件(root.crt/root.key)
  • 使用根證書和根證書私鑰(root.crt/root.key)配合服務器端私鑰頒發服務器端證書(server.crt);
  • 使用根證書和根證書私鑰(root.crt/root.key)配合客戶端私鑰頒發客戶端證書(server.crt);
  • 將根證書(root.crt)、服務器端證書(server.crt)、服務器端秘鑰(server.key)配置到Server中;
  • 客戶端使用客戶端私鑰和根證書頒發的客戶端證書(client.crt)正常訪問業務。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM