去年辦了一張自然人憑證後,除了上網無聊看看戶籍謄本以外,都沒有用到別的用途,總覺得只是再錢包裡面多一張沒用的卡而已。又沒辦法像捐血榮譽卡或是器官捐贈卡當作好人卡現給別人看,昨天晚上花了一個晚上研究怎麼用讀卡機加密用自然人憑證上網。只是好像沒有什麼實質用處的感覺。
我把步驟大概貼一下吧。
Client 部分:
1. 到
內政部憑證管理中心下載檔案 下載
SafeSign
SafeSign 的功能是把讀卡機裡面的 Smart Card 的加解密功能匯入到瀏覽器中(比較奇怪的是,現在只有Firefox 裡面有增加我的自然人憑證,IE一直都沒看到 @@)
安裝完後重開機之後,Firefox 應該就會多一個 PKCS#11 的憑證,這個就是自然人憑證裡面的
2. 接下來要把內政部的
憑證匯入到瀏覽器中。這樣子 Client 端的設定就完成了。
Server端:
Server 端這邊是以 apache + mod_ssl 設定法,如果不設定的話 Client 端還是可以用自然人憑證加密上網,只是 Server 端就分不清楚 Client 是用自然人憑證還是用瀏覽器自己產生的憑證加密的了, Server 設定完後就可以認出 Client 是誰了。
1. 先把
MOICA憑證和
GRCA憑證下載到自己電腦中,不過他的格式apache mod_ssl 不支援,所以要用 openssl 轉檔,轉檔指令如下
* openssl x509 -in MOICA.cer -inform d -out MOICA.crt
* openssl x509 -in GRCA.cer -inform d -out GRCA.crt
轉換成 pem 的格式。
MOICA 是內政部自然人憑證的 CA,GRCA 是政府憑證管理中心的 CA,也是 Root CA
2. 把 上面兩個 MOICA.crt 和 GRCA.crt 加到 /usr/local/etc/apache2/certs 並在 apache 的設定檔加入
* SSLCACertificatePath /usr/local/etc/apache2/certs/
並重跑 apache
3. 可以用 openssl s_client -connect [你的ip]:443 連進去看你的機器現在認得哪些 CA
裡面有一段
Acceptable client certificate CA names
/C=TW/O=Government Root Certification Authority
/C=TW/O=\xE8\xA1\x8C\xE6\x94\xBF\xE9\x99\xA2/OU=\xE5\x85\xA7\xE6\x94\xBF\xE9\x83\xA8\xE6\x86\x91\xE8\xAD\x89\xE7\xAE\xA1\xE7\x90\x86\xE4\xB8\xAD\xE5\xBF\x83
如果有這一段就表示你的 CA 已經裝好了,這樣 Server 部分也完成了。
之後只要用自然人憑證加密上網,就會看到 SSL_CLIENT_VERIFY 這個環境變數變成 SUCCESS
然後 SSL_CLIENT_S_DN_CN 這環境變數是使用者的本名 (像我是"王向榮")
SSL_CLIENT_S_DN 是 /C=TW/CN=王向榮/serialNumber=xxxxxxxxxx
(SSL_CLIENT_S_DN 就可以拿來做身份的判定)
其他相關的變數( SSL_CLIENT_* )都可以從 phpinfo() 裡面看到。
( 不過只用本名和卡內的序號做判定感覺還是有點不夠,如果能再把身份證讀出來就好了,不過自然人憑證中能直接讀出來的身份證字號只有四位而已,而且放身份證的那欄位 mod_ssl 好像讀不到。)
之後就把我自己電腦裡面的一些 service 的都改成用自然人憑證登入不用輸入密碼吧~