终极解决:iOS 与 Java 服务器之间 SSL 握手失败的解决:Cipher Suites

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: iOS 与 Java 服务器之间 SSL 握手失败的解决:Cipher Suites太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)本文遵循“署名-非商业用途-保持一致”创作公用协议转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。

iOS 与 Java 服务器之间 SSL 握手失败的解决:Cipher Suites

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino否则,出自本博客的文章拒绝转载或再转载,谢谢合作。


终极解决:

------------------

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


在 Oracle 官网搜 JCE (Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy),就会找到最新版本 JDK1.7 和 JDK1.8 对应的包,解压出来,就包含了 local_policy.jar、US_export_policy.jar 两个包,替换上面对应版本 JDK 该包位置下的文件即可。


有时会不好用,需要重启电脑,清空 Eclipse 工作空间等等,但一定会好用。


JDK 1.6 版对应的 JCE 在 CSDN 下载频道,可以搜到,目前 Oracle 官网能下载到 JDK 1.7、1.8 对应的 JCE,在 JDK 下载页下方仔细找 Java Cryptography Extension


------------------

好久没填坑了,不过这回这个感觉非常有必要填一填,因为我的猜测,终于验证了,虽然不是我印证的,那更需要好好记一记,这个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。


这句英文一直没搞清是干啥的,不过一直知道是服务端报的异常,而网上把国内国外都翻了个底儿朝天,也没人就此问题有一个很好的解答。


那么,看到这里基本应该明白了。


后续有时间,把过程整理出来,最好是带图的,格式化得很好的,俺自个儿也稀汗有美感的文章,不过时间总是那么着急,回头再说吧。




目录
相关文章
|
16天前
|
Java 网络安全 Maven
Exception in thread "main" java.lang.NoSuchMethodError: okhttp3.OkHttpClient$Builder.sslSocketFactory(Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/X509TrustManager;)Lokhttp3/OkHttpClient$Builder; 问题处理
【10月更文挑战第26天】Exception in thread "main" java.lang.NoSuchMethodError: okhttp3.OkHttpClient$Builder.sslSocketFactory(Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/X509TrustManager;)Lokhttp3/OkHttpClient$Builder; 问题处理
34 2
|
30天前
|
弹性计算 应用服务中间件 网络安全
ECS服务器使用:SSL证书安装、配置和问题定位指南
本文简要介绍了SSL证书的生成与部署方法,包括使用OpenSSL生成自签名证书和从CA获取证书的步骤,以及在Apache和Nginx服务器上的配置方法。此外,还提供了测试证书是否生效的方法和常见问题的解决策略,帮助确保证书正确安装并解决调试过程中可能遇到的问题。
136 0
|
1月前
|
域名解析 安全 网络安全
阿里云服务器WordPress环境上安装SSL证书
阿里云服务器WordPress环境上安装SSL证书
|
3月前
|
算法 Java 测试技术
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
|
3月前
|
安全 Java 关系型数据库
Java连接Mysql SSL初始化失败
Java连接Mysql SSL初始化失败
|
3月前
|
应用服务中间件 网络安全 nginx
运维专题.Docker+Nginx服务器的SSL证书安装
运维专题.Docker+Nginx服务器的SSL证书安装
123 3
|
4月前
|
安全 网络协议 网络安全
SSL(Secure Sockets Layer)是一种安全协议,用于在客户端和服务器之间建立加密的通信通道。
SSL(Secure Sockets Layer)是一种安全协议,用于在客户端和服务器之间建立加密的通信通道。
|
4月前
|
网络安全
嗯… 无法访问此页面43.139.210.211 花了太长时间进行响应,无法连接宝塔,是服务器内的宝塔面板开启了ssl的验证,但是没有绑定证书,所以被拦截,关闭宝塔面板的ssl访问认证恢复正常
嗯… 无法访问此页面43.139.210.211 花了太长时间进行响应,无法连接宝塔,是服务器内的宝塔面板开启了ssl的验证,但是没有绑定证书,所以被拦截,关闭宝塔面板的ssl访问认证恢复正常
|
Java 网络安全 数据安全/隐私保护
java ssl通信
版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.
947 0
|
8天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。