code_prettify

2014年4月9日 星期三

半自動解決瀏覽器憑證錯誤

senario: 佈署了 security HTTP後, user很不爽每次 IE都會出現憑證錯誤,是否繼續瀏覽然後得按繼續瀏覽才能進到頁面.

solution:
叫 user手動接受我們產生的自簽核憑證(sellf-signed certification).
不過,還是得處理一下我們的自簽核憑證才能順利讓 user接受憑證
錯誤訊息有三:
1.此網站出示的安全性憑證並非由信任的憑證授權單位所發行。
ans:這部份需要 user手動接受.首先,須將本網站加到信任的網站(網際網路選項>安全性>信任的網站,細節不贅述.然後點選網址列最右邊的憑證錯誤,在打開的視窗中點安裝憑證(先加信任網站才會有安裝憑證可以點),然後把憑證安裝到信任的憑證區.

2.此網站出示的安全性憑證已過期或尚未生效
ans:夠清楚了,憑證過期.那憑證如果是別人發行的,就只好檢查或改改自己的電腦時間.但是我們是發行者,憑證有效期限要多久我們自己可以決定.
keytool -genKey -keyalg RSA -alias <%aliasName%> -keystore <%keystore-path%> -storepass 1234qwer -validity 10000 -keysize 2048 -dname "CN=abc.com, OU=def, O=ghi, L=jkl, S=mno, C=pqr"
-validity 10000就是代表從下這個指令開始,產生的憑證在 10000天內有效:)

3.此網站出示的安全性憑證是為其他網站的位址所發行的
ans:上面那個 keytool指令, -dname中的 CN就是瀏覽器用來判斷"位址不符"的根據.把 CN改成自己的網址(不用加 https://)就符了.

tomcat+struts url querystring中文編碼解碼

senario: xmlhttprequest GET傳送含中文資料到 action, AP Server tomcat 6.x, struts 1.x

solution:
1. url path沒有中文,只有傳遞的參數有中文,所以對參數做 encodeURIComponent
2. tomcat \conf\server.xml中 Connector並未設定 URIEncoding屬性(因此預設值 ISO-8859-1)
3. request.getParameter 會做 URLDecode, 但是因為 2., 所以得到的中文是 ISO-8859-1編碼
4.對request.getParameter重新編碼就拿到想要的 utf-8 encoded string
   new String(req.getParameter("xxx").getBytes("ISO-8859-1"), "utf-8");