iOS 與 Java 伺服器之間 SSL 握手失敗的解決:Cipher Suites
<a target="_blank" href="http://blog.csdn.net/opengl_es">轉載請保留此句:太陽火神的美麗人生 - 本部落格專注于 靈活開發及移動和物聯裝置研究:iOS、Android、Html5、Arduino、pcDuino,否則,出自本部落格的文章拒絕轉載或再轉載,謝謝合作。</a>
終極解決:
------------------
iOS 與 Java 伺服器通訊建立 SSL 通道過程中,Java 伺服器先報異常,然後把異常最後捕獲點,傳回給 iOS 用戶端,但 Java 伺服器端确有一個掩蓋的事實異常,那就是找不到 Cipher Suites,由此字面意思,就清楚地知道,是 Java 伺服器沒有找到可用于 iOS 用戶端要求的加密套件。
之前解決,其實也是誤解,實際上是那台伺服器上具有完整的加密套件而已。
這要追溯到 JDK 的安全機制包:local_policy.jar、US_export_policy.jar
Mac 下,10.10.2 預設未安裝或禁用了更新前版本的 JDK,故從 Oracle 官網下載下傳安裝 JDK 1.8 後的位置:
/Library/Java/JavaVirtualMachines/1.6.0_65-b14-462.jdk/Contents/Home/lib/security
Windows 64 位 JDK 下的位置:
C:\Program Files\Java\jdk1.6.0_45\jre\lib\security
Windows 64 位 JRE 下的位置:
C:\Program Files\Java\jre6\lib\security
有時會不好用,需要重新開機電腦,清空 Eclipse 工作空間等等,但一定會好用。
好久沒填坑了,不過這回這個感覺非常有必要填一填,因為我的猜測,終于驗證了,雖然不是我印證的,那更需要好好記一記,這個Cipher Suites 後面的事情,太不可思議了。
不可思議,這牽扯到美國對華軟體出口限制。。。。。。類似的情況
http://www.brieftools.info/article/62392
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
-------------------
先挖個坑,有機會填,沒機會填也屬正常,畢竟地球表面也布滿了坑,隻不過我們叫盆地或高山而已。
Cipher Suites :加密套件?也許這麼翻譯也不準确,不過 SSL 官方有說明,一組 RSA、3DES 或 MD5,也或者其它對稱或非對稱加密算法的組合。
SSL 撥手開篇即道:HelloClient,同時帶着相關設定,其中就包含着這個 Cipher Suites 的名字。
iOS 和 Java 所支援的加密套件并不完全一樣,可能有個交集,但實際獲得到的 Java 的套件,在 iOS 上雖然都有,不過并不是都可用,可能有些是 Mac 的吧。
是以當 iOS 向 Java 伺服器請求 SSL 通道建立時,HelloClient 發出後,帶着的設定中,就有加密套件名稱,Java 服務端通過該名稱查找其支援的套件中是否存在,如果不存在,那麼就報錯了 not found cipher suites in common。
這句英文一直沒搞清是幹啥的,不過一直知道是服務端報的異常,而網上把國内國外都翻了個底兒朝天,也沒人就此問題有一個很好的解答。
那麼,看到這裡基本應該明白了。
後續有時間,把過程整理出來,最好是帶圖的,格式化得很好的,俺自個兒也稀汗有美感的文章,不過時間總是那麼着急,回頭再說吧。