客戶端如何驗證伺服器證書?
據我所知,
當我向 Verisign 請求證書(例如),並且在他們批准我是我之後,他們會創建一個包含數字簽名和公鑰的證書(為我)。
數字簽名是由他們創建(未加密!)的
private key
數據certificate data
。現在,一個客戶端連接到我的站點(它有一個 SSL 證書)。
- 他讀取數字簽名(來自證書)
- 他知道用於創建此簽名的算法,並再次對我的證書數據執行雜湊
- 客戶使用他的 Verisign 公鑰(在他的商店中)來解碼(而不是 解密)數字簽名
- 如果有比賽 - 一切都很好。
- 客戶端生成一個隨機數,用我的公鑰加密它,我的伺服器接受它,從現在開始 - 我們處於對稱模式。
我有以下問題:
- 我是對的嗎?
- 威瑞信在我的證書數據上創建數字簽名 -哪些數據?
- 數字簽名是由什麼操作(?)對我的證書數據創建的?(這是散列嗎?)
(我不是密碼學家,而是想了解這些東西的程序員。)
- 我是對的嗎?
差不多。不過,我想添加一些內容來幫助澄清:他商店中的 Verisign 公鑰屬於 Verisign CA(它也以證書的形式儲存)。另外我認為這個過程在解密時有資格,不是嗎?
- Verisign 在我的證書數據上創建數字簽名。哪些數據?
我不太確定你在這裡的意思,但我猜你是指公鑰儲存。
基本上瀏覽器/作業系統必須信任證書頒發機構(在本例中為 Verisign)。這種信任是通過將包含公鑰的威瑞信證書放入軟體中來實現的。然後,相應的私鑰將用於對購買 Verisign 服務的網站的證書進行數字簽名。因為瀏覽器擁有公鑰,它可以驗證 Verisign 使用相應密鑰簽名的任何內容,因此該模型的強度。
可能會出現一個問題:然後使用誰的私鑰來簽署儲存在瀏覽器中的證書?它通常是自簽名的(使用非常對應的私鑰)或由最終自簽名的公鑰簽名。無法驗證自簽名證書,因此必須提前建立信任(通過儲存證書)。
- 數字簽名是由什麼操作(?)對我的證書數據創建的?(這是散列嗎?)
Verisign(和其他 CA)所做的是生成一個私鑰/公鑰對(這個過程稱為密鑰儀式)。然後他們使用私鑰簽署網站證書(每個網站只執行一次),此過程創建由 Verisign 簽署的證書,然後將其傳遞給瀏覽器。如果您詢問算法,基本上它們會散列證書內容,然後使用私鑰加密散列,因此通常使用兩種算法,一種用於散列(MD5、SHA 等),另一種用於加密(RSA 、DSA 等)
編輯:閱讀評論以了解更多資訊,但我認為基本上這個解釋是正確的。
Verisign (CA) 在審核 CSR 後創建證書,使用其私鑰對其進行數字簽名並將其發送給組織(它使用其私鑰對其進行簽名,原因如下:不可否認性:消息完整性(使用私鑰作為輸入散列函式)
此時組織具有數字證書(公鑰)。每當任何客戶端連接到組織網路伺服器時,客戶端將首先進行 ssl 握手。客戶端將發送 hello 數據包,基本上在這一步它發送(密鑰、密碼、消息完整性標準(MD5、SHA-X、隨機數)一個 hello 數據包並請求伺服器數字證書。伺服器選擇密鑰、密碼套件、ssl 版本,雜湊函式輸出格式並將數字證書發送給客戶端,是的也是隨機數。在這一步檢查證書並請求CA驗證數字證書,得到肯定的響應後繼續前進。