2024年9月30日 星期一

OpenSSL Certificate 重點與生成指令速查表


簽發證書 2 步驟

  1. 生成 CSR (未被 CA 簽名的 Public Key) 和對應的 Private Key
  2. 載入 Certificate Authority (CA) 的 Private Key 然後對 CSR 做簽名,取得一個有 CA 簽名的 Public Key (.pem) 

自行簽發證書


簽發 CSR (純粹只是要自己幫自己簽證書) :

openssl req -new -newkey rsa:2048 -nodes -keyout private.key -out mycertificate_publickey_not_sign.csr

*如果不希望自己手動輸入內容,可以加入 subj 參數預先產生:

-subj "/C=TW/ST=Taiwan/L=Taipei/O=OrganizationName/OU=OrgUnitName/CN=DOMAIN.COM/[email protected]"
自己幫自己簽名:

openssl x509 -req -days 3650 -in mycertificate_publickey_not_sign.csr -signkey private.key -out cert.crt

現在 cert.crt 可以直接使用。


*CA 配置也是要先生成一個 CSR 去產生最初的簽名,CA 配置部分不在本篇幅中介紹。


證書信任鏈結構呈現方式

欲呈現下列關聯證書,最多可關聯 2 級 (Root CA > Intermediate CA > Certificate), 


關聯方法本身就是用 Intermediate CA Private Key 去對子證書簽名得到 Public Key,關聯的關鍵是子證書的 Extension 中的 AKI (Authority Key Identifier) 要對應到父級證書的 SKI (Subject Key Identifier)。 以此類推。

該證書要呈現 Cascade 聯級關係,所以要把所有 CA 的內容就直接塞到同一個 .pem file 裡面,加到前面或加到後面都沒有差。



證書主要域名設定

用 TLS Server 打開自己簽發的證書,如果用瀏覽器打開用錯誤的 IP 或 Domain 連入 Server 會直接跳警告,就算證書本身被加入電腦的 /etc/ssl/certs 應該也沒有用,必須要確認 Client Request 去的網址跟證書相同才行。

因此簽發 CSR 的時候在 Common Name (CN) 要填入 Domain Name 或 IP (像是 google.com) 這樣,CA 可以用 *.google.com 來表示所有 sub domain 都可以套用,如果只有單個網域,就必須寫到完整。


安裝證書

以防未來忘記,安裝證書就是直接點兩下,然後信任,如果要不被擋下,要把裡面所有信任的選項都打開。 或是直接把證書 Pem 裡面的 Public Key 直接 Append 到 /etc/ssl/certs 鏈上。

安裝證書其實只需要安裝 CA 級的證書就行,而且 CA 級證書沒有跳級信任,如果你有 2 級 CA (Root CA > Intermediate CA > Certificate),不可以只裝 Root CA ,這樣 Certificate 不會驗過,必須裝 Intermediate CA,可以不裝 Root CA 只裝 Intermediate CA,只是 Intermediate CA 會沒有其他信任鍊而已,應該還好,電腦勾選全信任本身也可以。


CA 證書簽發條件與差異

要注意不是只要你有 Certificate 和 Private Key 就可以隨便幫 Certificate 簽名,他本身是有指定用途的,證書上的 Extension 上的 Key Usage (KU) 必須要有 Certificate Signing ,在 Basic Constraints 有說 Subject 可以當 CA,才可以把自己當 CA 幫別人簽名,同時也需要管理吊銷證書 (CRL 或 OSCP)。





證書可替代域名 / IP 指定

證書可以不只透過 Common Name 指定一個網域被信任,實際上還可以用於多個網域的情形,甚至也可以指定 IP (此時 IP 就會有效)。

設定方式是在 SAN (Subject Alternative Name) 這個 Extension 加入 DNS / IPv4 / IPv6 的描述:



證書 Trust Store CA Files 不能做到的事

證書 CA 驗證 (truststore, verify CA) 只能驗證 Intermediate CA, Root CA,無法驗證證書本身,如果是要證書本身的驗證鏈路,可以直接就搜尋 Public Key 內文 (--BEGIN CERTIFICATE-- 底下的內容) 有沒有一致就好。


驗證某一個證書是否來自指定的 CA (記得還是只有一層級的 CA,不是跨級的 CA 就可以驗證)

openssl verify -extended_crl -verbose -CAfile ./ca-bundle -crl_check ./xxx.crt


吊銷證書管理方式 CRL

管理方式就是把不要的證書上的 pem 整個 public key 內容加入到 .crl 文件裡面,然後在 CA 證書上的 CDP (CRL Distribution Points) 上加入 .crl 檔案的網址,讓別人自己下載去更新。


缺點是吊銷證書一多,整個檔案就會很大,而且驗證器可能不會即時去拿 .crl 文件更新,有可能吊銷了但是使用者端還不知道,導致資訊落差。

使用要注意 file 網址不可以用 https。


吊銷證書管理方式 OCSP

OCSP 是加設一個 Verify Server,把證書加入 OCSP 管理吊銷狀態,OCSP 架設也比較複雜,但是 OpenSSL 本身有內建可以開啟 OSCP Server 的功能,既然是開 Server 就存在管理問題。

網址同樣不可以使用 https。


Reference:

[1] OpenSSL Cookbook


沒有留言:

張貼留言

© Mac Taylor, 歡迎自由轉貼。
Background Email Pattern by Toby Elliott
Since 2014