數字簽名使用非對稱加密技術。每個人都有壹對密鑰,私鑰只有自己知道,公鑰是公開的,私鑰是簽名的,公鑰是驗證的。
傳輸信息時,信息發送方用私鑰生成簽名,與公鑰壹起發送給信息接收方,接收方用公鑰驗證簽名。在上述過程中,信息的完整性得到驗證,但無法知道發送者的身份是否合法(因為任何人都可以自稱合法),於是引入了身份認證機構。
身份認證機構是信息接收者可以信任的機構,所有的公鑰都必須向該機構註冊。註冊後,身份認證機構向發送方頒發數字證書。在簽署文檔後,發送者將數字證書連同文檔和簽名壹起發送給信息接收者,接收者向身份認證機構驗證文檔是否真的用發送者的密鑰簽署。
數字證書是用於證明公鑰所有者身份的電子文件。該文件包含公鑰信息、所有者的身份信息(主體)和數字證書頒發機構(頒發者)對文件的數字簽名。
證書的本質是對公鑰進行數字簽名,認證機構用自己的私鑰對需要認證的人(或組織)的公鑰進行數字簽名,生成證書。
我們需要了解以下幾類證書。
自助簽證
用戶可以生成自己的數字證書,但這些證書不是由任何可信任的人簽名的。它們主要用於小規模測試。這種自簽名證書通常不被廣泛信任,使用時可能會遇到計算機軟件的安全警告。
根證書
根證書被廣泛認可,通常預裝在各種軟件中(包括操作系統、瀏覽器、電子郵件軟件等。).根證書作為信任鏈的起點,來自公認的、可靠的政府機構、證書頒發公司、非營利組織等。,並通過嚴格的驗證程序廣泛部署在主要軟件供應商的不同軟件中。由於調配程序復雜耗時,需要行政人員授權,以及機構法人身份的驗證。根證書的有效期可能超過20年。在壹些企業中,企業簽署的根證書也可能安裝在內部計算機上,以支持內網的企業級軟件;但是,這些證書可能沒有得到廣泛的認可,只適用於企業內部。
中介證書
認證機構的壹個重要任務就是為客戶頒發證書。雖然被廣泛認可的認證機構已經有了根證書,但是相應的私鑰可以用來簽署其他證書。但是,出於密鑰管理和行政方面的考慮,通常在為客戶進行數字簽名之前先頒發中介證書。中介證書的有效期會比根證書的有效期短,不同類型的客戶可能會有不同的中介證書。
TLS服務器證書
網站在互聯網上提供服務時,域名是服務器證書的主體,在機構或單位壹欄寫有相關機構的名稱。證書和私鑰將安裝在服務器上。客戶端的軟件(比如瀏覽器)會執行壹個認證路徑驗證算法來保證安全性。如果不確定加密通道是否安全(例如,證書上的主題名稱與網站的域名不對應,服務器使用自簽名證書,或者加密算法不夠強大),可能會警告用戶。
TLS客戶端證書
客戶端證書包含電子郵件地址或個人姓名,而不是主機名。客戶端證書不太常見,因為考慮到技術門檻和成本因素,服務商通常會對客戶的身份進行驗證,而不是依賴第三方認證機構。通常需要使用客戶端證書的服務都是內網的企業級軟件。他們會建立自己的內部根證書,企業的技術人員會將相關的客戶端證書安裝在企業內的電腦上使用。在開放的互聯網中,大多數網站使用登錄密碼和Cookie來認證用戶,而不是客戶端證書。
根證書(自簽名證書)、中間證書和終端實體(TLS服務器/客戶端)證書構成了以下信任鏈。
證書通常遵循X.509格式規範。
證書可以以二進制或Base64格式存儲。常見的文件擴展名有。cer,。crt,。der和。pem。如果證書和私鑰存儲在壹起,您可以使用PKCS#12(.p12)格式。
我們在編寫外部API的時候,對信息傳輸的安全性做了如下設計。
我們使用SHA256withRSA進行簽名。下面是壹個簡單的Java例子。