712 字
4 分鐘
HiPKI Local Server 介紹 | 自然人憑證開發筆記
2023-12-29
無標籤

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

上一篇講完開發方法的選擇,最簡單的方法是網站介接本機的 HiPKI Local Server,接著來介紹他。


HiPKI Local Server#

由於網頁前端無法直接與讀卡機上的自然人憑證進行互動,網站使用者需要先在電腦安裝 HiCOS 跨平台網頁元件,HiCOS 會在本地起一個 API Server (http://localhost:61161)叫做 HiPKI Local Server,網站則可以跟 Local Server 交換資料來使用自然人憑證。目前支援 Windows、Linux、MacOS。

打開瀏覽器輸入 http://localhost:61161,有看到以下畫面,代表服務有正常啟用。


IC 卡功能檢測#

想測試卡片功能可以 http://127.0.0.1:61161/selfTest.htm,可以看到卡片內有兩組憑證,分別用於簽章、加密,另外還有卡號、姓名、序號等資訊。


卡片詳細資訊#

要知道整張卡的詳細資訊可以到 http://127.0.0.1:61161/pkcs11info?withcert=true,包含使用者的憑證,如下圖會回傳一大串JSON。如果只要讀卡機資訊可以訪問 http://127.0.0.1:61161/pkcs11info

整體結構如下,會有一些伺服器資訊,其中最重要的資訊都在slots[0].token裡面。token下serialNumber代表卡號,certs則包含公鑰與其他資訊。

接下來看certs裡面的資訊,裡面會有四張憑證(certb64),憑證包含著公鑰,分別為:

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

以下為政府 Root CA 的憑證,以 PEM 格式加上 Header 排版,可以用來確認個人憑證是否是從政府憑證簽出來的。我另外把他放在 Github Gist上。

Terminal window
-----BEGIN CERTIFICATE-----
MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/
MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj
YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow
PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp
Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR
IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q
gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy
yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts
F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2
jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx
ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC
VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK
YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH
EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN
Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud
DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE
MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK
UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf
qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK
ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE
JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7
hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1
EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm
nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX
udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz
ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe
LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl
pYYsfPQS
-----END CERTIFICATE-----

以下為內政部中繼憑證,並放在 Github Gist

Terminal window
-----BEGIN CERTIFICATE-----
MIIFJzCCAw+gAwIBAgIQCLXYq8gL3O8sfg85ClY3EzANBgkqhkiG9w0BAQUFADA/
MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj
YXRpb24gQXV0aG9yaXR5MB4XDTAzMDQyMTA3NTYwN1oXDTIzMDQyMTA3NTYwN1ow
RzELMAkGA1UEBhMCVFcxEjAQBgNVBAoMCeihjOaUv+mZojEkMCIGA1UECwwb5YWn
5pS/6YOo5oaR6K2J566h55CG5Lit5b+DMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEAv7thQDmOKp3/+oyNHVH7TmbIZJhsa8mhxBhHky5jkfXoQvQN/+TQ
0eM384NQdw3cFM2NKrND5eQEGmHnZsdQ1EQPLHS0u5Ih3r7RlfZ6U9agOwxBUm0r
VOetUoQY0de5VG8QjRwmjRo3eeQ/YOLWlJa6D6jb37MNymrNeQM4Lb0e9TAVivbx
HsOt5TA1xR/4Pxdw06PJSKFHDQuCz7izJS3fw1pOTbq25yGx3KlWroVwJEBslLYj
bgLA9QqFCzWLtTJmgbmNPrt0G1NQrP9RzvqlBwqKB6UFLNslkmmVa98v19Vdq3Yk
3sLrv/Bd1xqRVV0P5vyaFwVAu8RKO4F67QIDAQABo4IBFTCCAREwHwYDVR0jBBgw
FoAUzMzvzClgpDuxkrY8+jJij6wlFTswHQYDVR0OBBYEFLYgyM++UYqkVLl40wTR
CrLMfi9GMA4GA1UdDwEB/wQEAwIBBjAUBgNVHSAEDTALMAkGB2CGdmUAAwMwEgYD
VR0TAQH/BAgwBgEB/wIBADA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vZ3JjYS5u
YXQuZ292LnR3L3JlcG9zaXRvcnkvQ1JML0NBLmNybDBWBggrBgEFBQcBAQRKMEgw
RgYIKwYBBQUHMAKGOmh0dHA6Ly9ncmNhLm5hdC5nb3YudHcvcmVwb3NpdG9yeS9D
ZXJ0cy9Jc3N1ZWRUb1RoaXNDQS5wN2IwDQYJKoZIhvcNAQEFBQADggIBAEj4KE9P
RejbvaPo91oPNstXaywc99QDsAx2Kl4tm7owpWhLS6aMVIQcD/B1PnnPTOla1yc+
Qk8EWbMoDuryFwRtxDeEkHpT51+FCuJNdPosK6eKUxxYPr2JTsCw3QyJivU5F4FZ
BVIZBVWZ3zwXzzSdwowCdPK6yj3PsWuFKNDbJOmTHZ2ZCP1XKRmYFYmUvZGwg2X0
JUorH4OmUjaRgibctVMpkMQWUXMQRClj9jNaF2mp/PCZ/3FtqbsQLa2vL/Cayb/4
AIY5qIJRKhg+BKlZ0MenufHpBBastnLoznemwO4h5/9Bo1EnVe/ywexVeAEL7O7T
f1tWryEcbW7H0C+kq4AyBGsSwnRwpwU0afa8L4+Y3N5axz1Aw3731zhKXHD6qZP7
dxyEtUCuqwfMaFJt60CsASh2sv1XB+/nV8DNPlbzM0JC1gJJSp+cJjwcB05jfb5i
iG4mSRpv8wo5faKynt3+6mdvXSSfxDgUPOkMivFcGFf5vlJtBOT+VFjKKomX1++Q
Hva3I7uWptYwVQSe5sAv6AZRf4sgN+algrRxBpCPGHxkfb5NWNgkHiI9XHxnKkk9
SQr8y1gJ7jyCjpcBpLGHlowJPCyHcWmBFePR6L+HQBdixOrLBKVogxWTPHOIDmUZ
CKjDAXzxwdgN9ZVpCMc+h0OMGZU9aWwDbp1k
-----END CERTIFICATE-----

兩張個人用的憑證中會包含姓名、憑證序號、身分證末四碼(subjectID),我們取得這些資訊不需要用到 PIN 碼,所以這些都是卡片的公開資訊。只有用到簽章與加密,需要使用到私鑰的情境,才需要輸入 PIN 碼。


HiPKI Local Server範例#

內政部提供了範例網站可以做簽章、加密的測試,並可以觀察他的原理。


結語#

卡式憑證之所以安全是因為,私鑰存放在卡片裡無法取出,需資料丟進卡片中運算,卡片再將做完簽章或加密的資料傳回電腦,而我們可以從 HiPKI Local Server 取得公鑰與其他資訊。接下來會來說明如何開發簽章與加密。

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