1956 字
10 分鐘
憑證鏈介紹 | 自然人憑證開發筆記
2024-01-03
無標籤

首頁 > 系列文 > 自然人憑證開發筆記

上一篇提到自然人憑證卡內有四張憑證,這四張憑證代表什麼意義,將在本篇進行說明。


卡內的四張憑證#

可以到 http://127.0.0.1:61161/pkcs11info?withcert=true 取得以下四張憑證的詳細資料,包含公鑰、效期、主體、序號、用途等資訊。可以驗證這些憑證是否屬於同一個憑證鏈

  • 政府根憑證(Root CA)
  • 內政部中繼憑證
  • 個人簽章用憑證
  • 個人加密用憑證

憑證鏈#

憑證鏈(Certificate Chain)是一連串的數位憑證,用於建立信任連接,以確保數位通信的安全性。在公開金鑰基礎建設(PKI)中,憑證鏈的主要目的是確保憑證的合法性和信任性。以下是憑證鏈的基本概念:

  1. 根憑證(Root Certificate): 根憑證是憑證鏈的頂層,是一個被信任的權威機構(CA)所簽發的憑證。根憑證的公開金鑰通常被內建在操作系統或瀏覽器等軟體中,用於驗證其他憑證的信任。
    政府根憑證由數位發展部下的「政府憑證總管理中心」負責維運。
  2. 中繼憑證(Intermediate Certificate): 中間憑證是介於根憑證和終端憑證之間的憑證。這些憑證由根憑證簽發,同時也用來簽發其他憑證,包括終端憑證。中間憑證的存在使得憑證鏈形成一個連續的信任鏈。
    各政府機關建立自己的憑證管理中心,自然人憑證是「內政部憑證管理中心」負責簽發,另外還有「經濟部工商憑證管理中心」、「衛福部醫事憑證管理中心」。
  3. 終端憑證(End Entity Certificate): 終端用戶憑證是由中間憑證簽發的,通常是用戶、伺服器或其他實體的憑證。這些憑證包含實體的公開金鑰和相關的身份信息。個人簽章用憑證、個人加密用憑證皆屬於此。

憑證鏈的建立過程通常如下:

  • 系統或應用程式首先檢查終端用戶憑證的簽名是否由中間憑證簽發。
  • 然後,檢查中間憑證的簽名是否由根憑證簽發。
  • 最終,系統或應用程式驗證根憑證的簽名,以確保它是由信任的根權威機構簽發的。

通過這個層層驗證的過程,系統可以建立對通信方身份的信任,確保憑證的有效性,防止惡意活動和網路攻擊。憑證鏈是建立公開金鑰基礎建設中信任鏈的關鍵概念之一。


政府根憑證#

從 pkcs11info 得到的根憑證資訊如下:

{
"certb64": "MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZTulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS",
"id": "Uk9PVENBQ2VydA==",
"issuerDN": "C=TW,O=Government Root Certification Authority",
"label": "ROOT CA Cert",
"notAfter": "321205132333Z",
"notAfterT": 1985865813,
"notBefore": "021205132333Z",
"notBeforeT": 1039094613,
"signatureAlgorithm": "1.2.840.113549.1.1.5",
"sn": "1F9D595AD72FC20644A5800869E35EF6",
"subjectDN": "C=TW,O=Government Root Certification Authority",
"thumbprint": "F48B11BFDEABBE94542071E641DE6BBE882B40B9"
}
  • certb64: 包含憑證的 Base64 編碼形式。
  • id: 憑證的唯一標識符,Base64 解碼完是 ROOTCACert。
  • issuerDN: 憑證簽發者(發行者)的識別名稱(Distinguished Name,DN),這裡是台灣政府根憑證機構。
  • label: 憑證的標籤或名稱,這裡是 ROOT CA Cert。
  • notAfter: 憑證的有效期截止日期,這裡是321205132333Z,表示在2032年12月05日13時23分33秒之前有效。
  • notBefore: 憑證的有效期開始日期,這裡是021205132333Z,表示在2002年12月05日13時23分33秒之後生效。
  • signatureAlgorithm: 使用的簽名演算法的OID(Object Identifier),這裡是SHA-1(1.2.840.113549.1.1.5)。
  • sn: 憑證的序號,這裡是1F9D595AD72FC20644A5800869E35EF6。
  • subjectDN: 憑證擁有者(主體)的識別名稱,這裡同樣是政府根憑證機構。
  • thumbprint: 憑證的指紋(Thumbprint),通常是憑證的數位指紋摘要,這裡是F48B11BFDEABBE94542071E641DE6BBE882B40B9。

內政部中繼憑證#

{
"certb64": "MIIFJzCCAw+gAwIBAgIQCLXYq8gL3O8sfg85ClY3EzANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTAzMDQyMTA3NTYwN1oXDTIzMDQyMTA3NTYwN1owRzELMAkGA1UEBhMCVFcxEjAQBgNVBAoMCeihjOaUv+mZojEkMCIGA1UECwwb5YWn5pS/6YOo5oaR6K2J566h55CG5Lit5b+DMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv7thQDmOKp3/+oyNHVH7TmbIZJhsa8mhxBhHky5jkfXoQvQN/+TQ0eM384NQdw3cFM2NKrND5eQEGmHnZsdQ1EQPLHS0u5Ih3r7RlfZ6U9agOwxBUm0rVOetUoQY0de5VG8QjRwmjRo3eeQ/YOLWlJa6D6jb37MNymrNeQM4Lb0e9TAVivbxHsOt5TA1xR/4Pxdw06PJSKFHDQuCz7izJS3fw1pOTbq25yGx3KlWroVwJEBslLYjbgLA9QqFCzWLtTJmgbmNPrt0G1NQrP9RzvqlBwqKB6UFLNslkmmVa98v19Vdq3Yk3sLrv/Bd1xqRVV0P5vyaFwVAu8RKO4F67QIDAQABo4IBFTCCAREwHwYDVR0jBBgwFoAUzMzvzClgpDuxkrY8+jJij6wlFTswHQYDVR0OBBYEFLYgyM++UYqkVLl40wTRCrLMfi9GMA4GA1UdDwEB/wQEAwIBBjAUBgNVHSAEDTALMAkGB2CGdmUAAwMwEgYDVR0TAQH/BAgwBgEB/wIBADA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vZ3JjYS5uYXQuZ292LnR3L3JlcG9zaXRvcnkvQ1JML0NBLmNybDBWBggrBgEFBQcBAQRKMEgwRgYIKwYBBQUHMAKGOmh0dHA6Ly9ncmNhLm5hdC5nb3YudHcvcmVwb3NpdG9yeS9DZXJ0cy9Jc3N1ZWRUb1RoaXNDQS5wN2IwDQYJKoZIhvcNAQEFBQADggIBAEj4KE9PRejbvaPo91oPNstXaywc99QDsAx2Kl4tm7owpWhLS6aMVIQcD/B1PnnPTOla1yc+Qk8EWbMoDuryFwRtxDeEkHpT51+FCuJNdPosK6eKUxxYPr2JTsCw3QyJivU5F4FZBVIZBVWZ3zwXzzSdwowCdPK6yj3PsWuFKNDbJOmTHZ2ZCP1XKRmYFYmUvZGwg2X0JUorH4OmUjaRgibctVMpkMQWUXMQRClj9jNaF2mp/PCZ/3FtqbsQLa2vL/Cayb/4AIY5qIJRKhg+BKlZ0MenufHpBBastnLoznemwO4h5/9Bo1EnVe/ywexVeAEL7O7Tf1tWryEcbW7H0C+kq4AyBGsSwnRwpwU0afa8L4+Y3N5axz1Aw3731zhKXHD6qZP7dxyEtUCuqwfMaFJt60CsASh2sv1XB+/nV8DNPlbzM0JC1gJJSp+cJjwcB05jfb5iiG4mSRpv8wo5faKynt3+6mdvXSSfxDgUPOkMivFcGFf5vlJtBOT+VFjKKomX1++QHva3I7uWptYwVQSe5sAv6AZRf4sgN+algrRxBpCPGHxkfb5NWNgkHiI9XHxnKkk9SQr8y1gJ7jyCjpcBpLGHlowJPCyHcWmBFePR6L+HQBdixOrLBKVogxWTPHOIDmUZCKjDAXzxwdgN9ZVpCMc+h0OMGZU9aWwDbp1k",
"id": "Q0FDZXJ0",
"issuerDN": "C=TW,O=Government Root Certification Authority",
"label": "CA Cert",
"notAfter": "230421075607Z",
"notAfterT": 1682063767,
"notBefore": "030421075607Z",
"notBeforeT": 1050911767,
"signatureAlgorithm": "1.2.840.113549.1.1.5",
"sn": "08B5D8ABC80BDCEF2C7E0F390A563713",
"subjectDN": "C=TW,O=行政院,OU=內政部憑證管理中心",
"thumbprint": "3E21D6E39C6FC08F4442F37B22F3C13AA1A3D99E",
"usage": "keyCertSign|cRLSign"
}
  • certb64: 包含憑證的Base64編碼形式。
  • id: 憑證的唯一標識符,Base64 解碼完是 CACert。
  • issuerDN: 憑證簽發者(發行者)的識別名稱(Distinguished Name,DN),這裡是台灣政府根憑證機構。
  • label: 憑證的標籤或名稱,這裡是 CA Cert。
  • notAfter: 憑證的有效期截止日期,這裡是230421075607Z,表示在2032年04月21日07時56分07秒之前有效。
  • notBefore: 憑證的有效期開始日期,這裡是030421075607Z,表示在2003年04月21日07時56分07秒之後生效。
  • signatureAlgorithm: 使用的簽名演算法的OID(Object Identifier),這裡是SHA-1(1.2.840.113549.1.1.5)。
  • sn: 憑證的序號,這裡是08B5D8ABC80BDCEF2C7E0F390A563713。
  • subjectDN: 憑證擁有者(主體)的識別名稱,這裡是屬於台灣政府內政部憑證管理中心。
  • thumbprint: 憑證的指紋(Thumbprint),通常是憑證的數位指紋摘要,這裡是3E21D6E39C6FC08F4442F37B22F3C13AA1A3D99E。
  • usage: 憑證的使用權限,這裡是 keyCertSign|cRLSign,表示該憑證有簽署其他憑證(keyCertSign)和簽署撤銷清單(cRLSign)的權限。

個人簽章用憑證#

{
"certb64": "<隱藏>",
"id": "U0lHTg==",
"issuerDN": "C=TW,O=行政院,OU=內政部憑證管理中心",
"label": "cert1",
"notAfter": "251112155959Z",
"notAfterT": 1762963199,
"notBefore": "201112011756Z",
"notBeforeT": 1605143876,
"signatureAlgorithm": "1.2.840.113549.1.1.11",
"sn": "<隱藏>",
"subjectCN": "周詳",
"subjectDN": "C=TW,CN=周詳,serialNumber=<隱藏>",
"subjectID": "0000",
"thumbprint": "<隱藏>",
"usage": "digitalSignature"
}
  • certb64: 包含憑證的Base64編碼形式。
  • id: 憑證的唯一標識符,Base64 解碼完是 SIGN。
  • issuerDN: 憑證簽發者(發行者)的識別名稱(Distinguished Name,DN),這裡是行政院內政部憑證管理中心。
  • label: 憑證的標籤或名稱,這裡是 cert1。
  • notAfter: 憑證的有效期截止日期,這裡是251112155959Z,表示在2051年11月12日15時59分59秒之前有效。
  • notBefore: 憑證的有效期開始日期,這裡是201112011756Z,表示在2011年12月1日17時56分之後生效。
  • signatureAlgorithm: 使用的簽名演算法的OID(Object Identifier),這裡是SHA-256(1.2.840.113549.1.1.11)。
  • sn: 憑證的序號。
  • subjectCN: 憑證擁有者的姓名,這裡是”周詳”。
  • subjectDN: 憑證擁有者的識別名稱,serialNumber 為擁有者的序號。
  • subjectID: 憑證擁有者的識別ID,為身分證字號的末四碼。
  • thumbprint: 憑證的指紋。
  • usage: 憑證的使用權限,這裡是 digitalSignature,表示該憑證僅用於數位簽章。

個人加密用憑證#

{
"certb64": "<隱藏>",
"id": "S0VZWA==",
"issuerDN": "C=TW,O=行政院,OU=內政部憑證管理中心",
"label": "cert2",
"notAfter": "251112155959Z",
"notAfterT": 1762963199,
"notBefore": "201112011756Z",
"notBeforeT": 1605143876,
"signatureAlgorithm": "1.2.840.113549.1.1.11",
"sn": "<隱藏>",
"subjectCN": "周詳",
"subjectDN": "C=TW,CN=周詳,serialNumber=<隱藏>",
"subjectID": "0000",
"thumbprint": "<隱藏>",
"usage": "keyEncipherment|dataEncipherment"
}
  • certb64: 包含憑證的Base64編碼形式。
  • id: 憑證的唯一標識符,Base64 解碼完是 KEYX。
  • issuerDN: 憑證簽發者(發行者)的識別名稱(Distinguished Name,DN),這裡是行政院內政部憑證管理中心。
  • label: 憑證的標籤或名稱,這裡是”cert2”。
  • notAfter: 憑證的有效期截止日期,這裡是251112155959Z,表示在2051年11月12日15時59分59秒之前有效。
  • notBefore: 憑證的有效期開始日期,這裡是201112011756Z,表示在2011年12月1日17時56分之後生效。
  • signatureAlgorithm: 使用的簽名演算法的OID(Object Identifier),這裡是SHA-256(1.2.840.113549.1.1.11)。
  • sn: 憑證的序號。
  • subjectCN: 憑證擁有者的姓名,這裡是”周詳”。
  • subjectDN: 憑證擁有者的識別名稱,serialNumber 為擁有者的序號。
  • subjectID:憑證擁有者的識別ID,為身分證字號的末四碼。
  • thumbprint: 憑證的指紋。
  • usage: 憑證的使用權限,這裡是keyEncipherment|dataEncipherment,表示該憑證有加密金鑰以及資料加密的權限。

結語#

從上面我們可以了解到憑證鏈的原理,並且彼此間驗證的方式,而這些擁有者資訊、用途、身分證末四碼也都有包含在憑證 certb64 中。個人用的兩張憑證是完全不同的,憑證序號 sn 也不同,subjectDN 中的 serialNumber 代表擁有者序號則會相同。

▶ 閱讀更多:深入淺出自然人憑證