首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 數位憑證完整指南:X.509 架構、CA 信任鏈、PFX/USB Key、SSL/簽名/加密實戰

     編輯:關於C#

數位憑證是網路世界的「身分證」,解決**竊聽、偽裝、篡改、抵賴**四大威脅。本文系統說明 X.509 結構、CA 運作流程、公開金鑰基礎建設(PKI)、常見檔案格式(.cer/.pfx/.p12)、USB Key 雙因子認證,以及 C# 實務應用場景。

四大威脅與對策

威脅對策技術手段
竊聽機密性公開金鑰加密 / 對稱加密混合
偽裝鑑別授權CA 驗證憑證有效性
篡改完整性雜湊演算法 / 數位簽章
抵賴不可否認性CA 法律效力 / 時間戳記

非對稱加密核心流程

  1. 雙方各自擁有 私鑰(不公開) + 公鑰(公開)。
  2. A 傳訊息給 B:用 **B 的公鑰加密** → 只有 B 的私鑰能解密。
  3. A 簽署訊息:用 **A 的私鑰簽章** → 任何人用 A 的公鑰驗證 → 確認來源未竄改。
  4. 實務採用 **混合加密**:對稱金鑰加密大量資料 + 非對稱加密保護對稱金鑰。

CA(Certificate Authority)信任鏈

Root CA (離線根憑證,自簽)
  └─ Intermediate CA (簽發伺服器/用戶憑證)
        └─ Server Certificate (www.example.com)
        └─ Client Certificate (用戶/員工)
  • 瀏覽器/作業系統內建 **受信任根憑證存放區**,驗證鏈路至根。
  • 12306 購票憑證、銀行 USB Key 皆屬此架構。

憑證結構關鍵欄位

欄位說明
Subject (CN)擁有者名稱(網域、人名、組織)
Issuer簽發者 CA 名稱
Valid From / To有效期限
Public Key公開金鑰(RSA 1024/2048/4096、ECC)
Signature Algorithm簽章演算法(sha256RSA 等)
ThumbprintSHA1 雜湊指紋,唯一識別
Key Usage金鑰用途(加密、簽章、金鑰交換)
Enhanced Key Usage擴展用途(Server Auth、Client Auth、Code Signing、Email Protection)

常見檔案格式

  • .cer / .crt / .der:僅含**公開鑰**,可公開散布。
  • .pfx / .p12:含**私鑰+公開鑰**,受密碼保護,**極機密**。
  • .pem:Base64 編碼文本格式,Linux/OpenSSL 常用。

五大憑證類型與應用

類型用途典型場景
伺服器憑證SSL/TLS 加密、證明網站身分HTTPS、API Gateway
用戶端個人憑證雙因子認證(USB Key + PIN)、數位簽章網銀、報稅、電子簽約
電子郵件憑證S/MIME 簽章/加密郵件企業機密郵件
代碼簽署憑證Authenticode 簽署 .exe/.msi/.dllWindows SmartScreen 信任、驅動程式簽署
企業/文件憑證法人實體簽章、PDF 數位簽章電子發票、合約簽署

C# 實務操作


using System.Security.Cryptography.X509Certificates;

// 1. 從存放區載入
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates.Find(X509FindType.FindByThumbprint, "abc123...", false);
var cert = certs[0];

// 2. 從 PFX 載入(含私鑰)
var cert2 = new X509Certificate2("user.pfx", "password", X509KeyStorageFlags.MachineKeySet);

// 3. 加密(用公開鑰)
byte[] Encrypt(byte[] data, X509Certificate2 cert) {
    using var rsa = cert.GetRSAPublicKey();
    return rsa.Encrypt(data, RSAEncryptionPadding.OaepSHA256);
}

// 4. 解密/簽章(需私鑰)
byte[] Sign(byte[] data, X509Certificate2 cert) {
    using var rsa = cert.GetRSAPrivateKey();
    return rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
}

// 5. 驗證簽章
bool Verify(byte[] data, byte[] sig, X509Certificate2 cert) {
    using var rsa = cert.GetRSAPublicKey();
    return rsa.VerifyData(data, sig, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
}

建立測試憑證

  • Windows SDK:makecert.exe(舊)、New-SelfSignedCertificate (PowerShell 現代)
  • OpenSSL:openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
  • IIS 管理員 → 伺服器憑證 → 建立自我簽署憑證

避坑提醒

  • **私鑰不可外洩**:PFX 檔案等同身分證+印章,嚴禁 commit 到 Git、傳輸明文郵件。
  • **憑證到期前輪換**:建立監控告警,自動化續簽(ACME/Let's Encrypt/內部 CA)。
  • **金鑰長度**:RSA < 2048 已不安全,建議 2048+ 或 ECC P-256/P-384。
  • **雙因子認證**:USB Key 將私鑰存於硬體安全模組(HSM),不可導出,最高安全等級。

數位憑證是資安基石。理解 X.509、CA 信任鏈、金鑰用途與檔案格式,才能在 HTTPS、簽章、加密、認證等場景做正確的架構決策。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved