據我所知,SSL過程大致如下
我疑惑的是第二點
問題一
現在有公信力的CA的公鑰,是包在一個憑證裡嗎?
我自己腦海中想像是這樣的:假設一個有公信力的CA叫做CA1,幫自己簽一個憑證,CA1的公鑰包在那個憑證裡面,但要有CA1的公鑰才能解開這個憑證確定CA1的公鑰是正確的,而不是中間人的,到底是怎麼運作(要先有公鑰才能解開知道公鑰?)?
問題二
假設現在是我自己自簽憑證,CA公鑰沒有在網路上流通,CA的公鑰如何被客戶端拿到來解開憑證,得以拿到Server的公鑰?
最後自己總結出來的筆記:[SSL] 數位簽名與驗證的過程
根憑證(root certificate)是屬於根憑證頒發機構(CA)的公鑰憑證, 根憑證沒有上層機構再為其本身作數位簽章,所以都是自簽憑證。許多應用軟體(例如作業系統、網頁瀏覽器)會預先安裝可被信任的根憑證,這代表用戶授權了應用軟體代為審核哪些根憑證機構屬於可靠
https://zh.wikipedia.org/zh-tw/%E6%A0%B9%E8%AF%81%E4%B9%A6
CA Certificate List 各家的處理方法不同:
Firefox 瀏覽器: 從它們自行維護的 CA 憑證庫清單下載
https://ccadb-public.secure.force.com/mozilla/IncludedCACertificateReport
Opera 瀏覽器: 從它們自行維護的 CA 憑證庫清單下載
https://certs.opera.com/
Chrome 瀏覽器: 使用 OS 自帶的 CA 憑證庫 (由 OS 負責更新)
http://www.chromium.org/Home/chromium-security/root-ca-policy
iOS 手機: 由 Apple 自行維護 CA 憑證庫清單
https://support.apple.com/zh-tw/HT204132
你自己做的自簽憑證的話, 你要把 CA Root 的憑證匯出, 寄給每一個 Client 用戶, 請它們安裝到 OS 或 瀏覽器內, 才能被驗證....
如果你是 AD 環境, 所有用戶都加入 AD 的話, 可以透過 GPO 來自動派送...要不然, 你也可以向瀏覽器開發商申請審核, 將你的 Root CA 列入他們的憑證庫, 發布給所有使用者 (這個前提是, 你的 CA 憑證簽發過程需要經過法律見證, 而且你的機構要證明有能力防止私鑰被盜走)....