2015-02-02

JAVA WEB Applet 及 application 加入第三方憑證簽署

上一篇提到了如何讓未簽署或自我簽署的網頁應用程式在JRE下運行而無須手動設定且不花錢的方法,然而後來我們還是認命買了憑證,畢竟有些比較重要的程式還是讓使用者用起來方便點、多點信任會較好。

以下介紹如何簽第三方憑證,並讓程式能在JRE下正確運行的步驟:



0.準備:
首先你要先去買憑證,並且同時會拿到一組keystore password。
假設憑證為myverification.pfx,keystore password為mypassword,
要簽署的執行的應用程式applet jar為myjar.jar,

1.取出簽章別名(alias name):
keytool -list -v -storetype pkcs12 -keystore myverification.pfx
→輸入keystore password
→在輸出畫面中,找出別名的欄位,並記下。假設別名為my-alias-name (有可能是英文名、簡單的英數字、或長長的像雜湊碼的東西,像我自已拿到憑證別名就只有"1"...)

2.進行簽署:
jarsigner -tsa http://timestamp.comodoca.com/rfc3161 -storetype pkcs12 -keystore myverification.pfx myjar.jar my-alias-name
→輸入keystore password

3.檢查是否簽署成功:
jarsigner -verify -verbose -certs myjar.jar

4.放到網頁中:
<applet id="MyApplet" name="MyApplet" archive="myjar.jar" code="com.mydomain.www.MyApplet.class" width="640" height="480"></applet>
好了,難道就這麼簡單就成功了嗎?才怪...:D
尚須設定jar裡MANIFEST.MF的安全性設定,才能讓應用程式正確啟動,比起直接加入白名單更囉嗦啊...
以下是MANIFEST.MF一般性設定,詳細屬性設定可參考這裡

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.4
Created-By: 1.7.0_25-b17 (Oracle Corporation)
Main-Class: ${main.class}
Application-Name: My Application
Permissions: all-permissions
Trusted-Only: true
Trusted-Library: true
Codebase: www.mydomain.com
Application-Library-Allowable-Codebase: www.mydomain.com
Caller-Allowable-Codebase: www.mydomain.com

references:
http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/security/manifest.html
http://docs.oracle.com/javase/tutorial/deployment/applet/deployingApplet.html
http://docs.oracle.com/javase/tutorial/deployment/applet/html.html
http://docs.oracle.com/javase/tutorial/deployment/jar/secman.html
https://www.java.com/en/download/help/java_blocked.xml

4 則留言:

  1. 請問版主當初開發讀卡程式有去尋找Java Web Start的solution?
    目前銀行或者其他產業讀卡程式看起來都是用ACTIVEX綁IE居多 或者是自行開發外掛程式
    有可能開發一個JWS適用IE Chrome Firefox 和 Safari嗎?

    回覆刪除
    回覆
    1. 目前我們是已經寫好了一個JWS,這個JWS本身是個Web Server+Card Reader,這樣JWS就跟瀏覽器完全脫勾了,再利用JWS+本機AJAX的方式就可以讓網頁取得健保卡資料,不過要注意CORS及JWS中SSL的問題。

      刪除
  2. 我可以請教版主 Java Web Start 如何使用嗎? 謝謝

    回覆刪除
    回覆
    1. 您可以參照這份簡易的oracle tutorial: https://docs.oracle.com/javase/tutorial/deployment/webstart/
      簡單說就是下載一個.jnlp並執行,就會自動下載java應用程式並自動執行。

      刪除