程式設計者所需要知道關於 HTTPS 知識


  1. PKI
    1. 台灣的頂層 CA
      1. Chunghwa Telecom
      2. TWCA
      3. GRCA
    2. 加密法
      1. 常見的對稱式加密法
      2. 常見的非對稱式加密法
    3. 憑證
      1. 憑證的取得
  2. SSL / TLS
    1. 機制
    2. 解讀 Cipher Sutie
    3. IIS Server 如何啟用 HTTPS
      1. 匯入憑證
      2. 站台繫結
  3. 參考資料

筆記身為開發者所需要關於 Https 的知識,包含加密演算法、憑證以及網頁伺服器該如何實作。

logo

PKI

公開金鑰基礎建設(英語:Public Key Infrastructure,縮寫:PKI),又稱公開金鑰基礎架構、公鑰基礎建設、公鑰基礎設施、公開密碼匙基礎建設或公鑰基礎架構,是一組由硬體、軟體、參與者、管理政策與流程組成的基礎架構,其目的在於創造、管理、分配、使用、儲存以及復原數位憑證。
wikipedia

在 PKI 的架構中,CA (Certification Authority) 負責進行憑證的管理。憑證是個人訊息以及公開金鑰所組合的檔案,而在 PKI 架構中由從屬於 CA 的 RA (Registration Authority) 來專責公開金鑰與個人身分的對應,減少 CA 的負擔。

藉由 PKI 可以做到下列資安事項:

  1. 通訊過程的加密:將要傳輸的資料使用公開金鑰加密,持有對應私密金鑰者才能解開
  2. 宣稱身分的驗證:將任意檔案藉由私鑰加密,任何人使用公開金鑰解開者能夠驗證私鑰持有者的身分
  3. 內容完整性:藉由雜湊的機制,當內容被第三方竄改時,內容的雜湊值會不一致,從而保持內容的完整
  4. 不可否認性:因為雙方公、私鑰驗證過彼此身分,所以發生的行為不能由任一方否認

台灣的頂層 CA

Chunghwa Telecom

提供憑證的商業服務,也代為營運**政府伺服器數位憑證管理中心(GTLSCA)**的憑證業務。

OU=ePKI Root Certification Authority,O=Chunghwa Telecom Co., Ltd.,C=TW

中華電信公開金鑰基礎建設

頂層CA發給自己服務網站的憑證 - 中華電信

TWCA

提供憑證的商業服務。

CN=TWCA Global Root CA,OU=Root CA,O=TAIWAN-CA,C=TW
CN=TWCA Root Certification Authority,OU=Root CA,O=TAIWAN-CA,C=TW

頂層CA發給自己服務網站的憑證 - TWCA

GRCA

政府憑證總管理中心(Government Root Certification Authority) ,為政府機關公開金鑰基礎建設階層架構的最頂層憑證機構,同時也是PKI的信賴起源,具備最高的公信度。負責PKI內外憑證機構間的交互認證,由國家發展委員會委託中華電信數據分公司營運。

O=Government Root Certification Authority,C=TW
Trusted Root Certificate Authority List

頂層CA發給自己服務網站的憑證 - GRCA

加密法

分為**對稱式(Symmetric Encryption)以及非對稱式(Asymmetric Encryption)**,對稱式在加密以及解密使用同一把金鑰進行,所以加解密速度快,但無法公開的交換金鑰;非對稱式雙方都有一組公開金鑰以及私鑰,可以在公開傳送訊息,進行的方式如下:

A 將檔案以B的公鑰進行加密;B 收到檔案後以自己的私鑰進行解密

而更完善的機制是:

A 將檔案以B的公鑰進行加密、並同時以自己的私鑰進行加密;
B 收到檔案後先以A的公鑰進行解密,確認檔案確實由是由A所提供;同時再以自己的私鑰進行解密

綜合對稱式與非對稱式的優點,公開環境的溝通,就是先藉由非對稱式加密法,傳送對稱式加密法所使用的金鑰,之後的訊息溝通則都可以用對稱式金鑰來完成。

常見的對稱式加密法

AES、RC4、3DES、Blowfish

常見的非對稱式加密法

RSA、Diffie-Hellman、ElGamal、ECC、ECDH

解密 Schannel

那些關於SSL/TLS的二三事(八) — 加密演算法簡介

憑證

PKI 所使用的憑證格式為 X.509

X.509是密碼學裡公鑰憑證的格式標準。X.509憑證已應用在包括TLS/SSL在內的眾多網路協定里,同時它也用在很多非線上應用場景里,比如電子簽章服務。X.509憑證里含有公鑰、身分資訊(比如網路主機名,組織的名稱或個體名稱等)和簽章資訊(可以是憑證簽發機構CA的簽章,也可以是自簽章)。
wikipedia

憑證的取得

可以分為向信任第三方發出申請或者自行簽發的方式。

那些關於SSL/TLS的二三事(三) — 給誰簽?

那些關於SSL/TLS的二三事(五) — 數位簽章

那些關於SSL/TLS的二三事(七) — 憑證的種類

SSL / TLS

機制

那些關於SSL/TLS的二三事(九) — SSL (HTTPS)Communication

解讀 Cipher Sutie

加密法使用時機 使用的加密法
Key Exchange 金鑰交換 RSA, Diffie-Hellman, ECC, ECDH, SRP, PSK
Authentication 驗證 RSA, DSA, ECDSA
Bulk Ciphers 內容加密 RC4, 3DES, AES
Message Authentication 完整性檢查 HMAC-SHA256, HMAC-SHA1, HMAC-MD5

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f) ECDH secp256r1 (eq. 3072 bits RSA)
WEAK : TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013) ECDH secp256r1 (eq. 3072 bits RSA)
WEAK : TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (0xc027) ECDH secp256r1 (eq. 3072 bits RSA)
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030) ECDH secp256r1 (eq. 3072 bits RSA)
WEAK : TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014) ECDH secp256r1 (eq. 3072 bits RSA)
WEAK : TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (0xc028) ECDH secp256r1 (eq. 3072 bits RSA)
WEAK : TLS_RSA_WITH_AES_128_GCM_SHA256 (0x9c)
WEAK : TLS_RSA_WITH_AES_128_CBC_SHA (0x2f)
WEAK : TLS_RSA_WITH_AES_128_CBC_SHA256 (0x3c)
WEAK : TLS_RSA_WITH_AES_256_GCM_SHA384 (0x9d)
WEAK : TLS_RSA_WITH_AES_256_CBC_SHA (0x35)
WEAK : TLS_RSA_WITH_AES_256_CBC_SHA256 (0x3d)
WEAK : TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (0x41)
WEAK : TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (0x84)

mozilla wiki - Security/Server Side TLS

IIS Server 如何啟用 HTTPS

匯入憑證

站台繫結

Powershell Script For Best TLS Setup

參考資料

HOW HTTPS WORKS

What Every Developer Must Know About HTTPS

Play by Play: What You Need to Know About HTTPS Today

Implementing Active Directory Certificate Services in Windows Server 2016

為何HTTPS憑證有貴有便宜還更可以免費?讓我們從CA原理開始講起

請求可被 Chrome 瀏覽器信任的 Web 憑證

傳輸層安全性協定

中華電信通用憑證管理中心

How does HTTPS work? What’s a CA? What’s a self-signed Certificate?

What are certificates?