最近碰到的一些 SSL 问题记录

最近碰到一些 SSL 的小问题,特记录下。

我们有个 Java 实现的 SSL TCP 服务端,为客户端(PC、Android 和 iOS)提供 SSL 接入连接服务。最近有用户反馈其手机上 App 不能正常连接登录,别人手机上都可以。经过单独回访调查该用户使用的手机操作系统是 Android 6.0,经搜索了解了 Android 6.0 之后 Google 使用了自家的 BoringSSL 替换了原来的 OpenSSL,怀疑是这里在捣鬼。

继续搜索类似问题解决方案,在参考[1] 中找到答案:

SSL/TLS握手过程中,假如选中了诸如 TLS_DHE_RSA_WITH_AES_128_CBC_SHA 这样使用 deffie-hellman 密钥的 cipher,那么在 deffie-hellman 密钥交换过程中会使用的一个P参数(prime number),服务器侧提供的 P 参数在 JDK8 之前都只用了 768bit 的长度,小于 1024bit 存在安全漏洞可导致 logjam attack,会被最新本版的浏览器和 BoringSSL 拒绝。

明了了原因后我们只好把 JDK 从 6 升级到了 8,顺利解决 Android6.0 SSL 握手失败问题。但解决完这个后,没多久又发现 APNS iOS 推送又不可用了,和苹果推送服务器建立 SSL 连接失败,无法推送消息。唯一的变化就是升级到了 JDK8 自然就将怀疑目标对准了 JDK8。

继续 Google 一把找了同类受害者,他已经搞明白了原因,见参考[2]

The problem was the exported keystore (in PKCS12 format) contained the private key as well as the production certificate and the development certificate for push notifications. Java can use keystores in the PKCS12 format. But Java 6 and Java 8 did not read-in the keystore the same way. It looks like Java 6 read in the production certificate for the private key and Java 8 read in the development certificate.

解决办法也很简单,先用 JDK6 提供的 keytool 将 .p12 格式的证书转换为 .jks 格式。再用 JDK8 提供的 keytool 将刚生成的 .jks 证书转换为 .p12 格式。转换命令如下:

.p12 -> .jks

/JDK6/keytool -importkeystore -destkeystore apns.jks -srckeystore apns_jdk6.p12 -srcstoretype PKCS12

.jks -> .p12

/JDK8/keytool -importkeystore -srckeystore apns.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore apns_jdk8.p12

参考

[1] liuxian233. Android 6.0 HTTPS连接ssl3_get_server_key_exchange:BAD_DH_P_LENGTH错误问题

[2] szediwy. Apple Push Notification with Java

[3] ASHISH PARAB. APPLE PUSH NOTIFICATION SERVICE CERTIFICATE ISSUE WITH JDK 7



写点文字,画点画儿,「瞬息之间」一切都变了。觉得不错,扫描二维码关注。

时间: 2024-10-10 05:35:32

最近碰到的一些 SSL 问题记录的相关文章

为你的android App实现自签名的ssl证书(https)

不愿意看啰嗦的可以直接去          实现步骤 最近公司项目用到https的接口形式,对于一般的网络请求 我们用的是http://******      使用的是 代码用来打开一个 http 连接. URL urlConnection = new URL("http://www.codeproject.com/"); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 不要在 ht

网站SSL安装配置

背景介绍: HTTPS,全称:Hyper Text Transfer Protocol over Secure Socket Layer,是通过SSL安全机制传输,保证网站数据不被窃听.冒充.篡改等安全风险,保证网站传输安全可靠,下面是通过nginx配置ssl模块记录. 环境信息: nginx ssl-->tomcat1 tomcat2 tomcat3 操作系统: centos  6.8 nginx: 1.12.0 tomcat: tomcat8 之前的流量图:普通用户,从公网访问公司网站,会经

微信JSSDK接入问题记录及源码

今天应客户要求,把一个html5游戏的微信分享功能从第三方库切换到官方库了,官方微信JSSDK. 这其中碰到了一些问题,记录一下(服务端环境为PHP): 1. 开启openssl功能 Warning: file_get_contents(https://graph.qq.com/user/xxxxx) [function.file-get-contents]: failed to open stream: No error in /xxx/php.php on line 2 遇到这样的错误的,是

SSL/TLS 协议介绍

SSL/TLS 协议(RFC2246 RFC4346)处于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持. 从协议内部的功能层面上来看,SSL/TLS 协议可分为两层: 1. SSL/TLS 记录协议(SSL/TLS Record Protocol),它建立在可靠的传输层协议(如 TCP)之上,为上层协议提供数据封装.压缩.加密等基本功能. 2. SSL/TLS 握手协议(SSL/TLS Handshake Protocol),它建立在 SSL/TLS 记录协议之上,用于在实际

windows curl ssl版本编译

编译curl-ssl版本碰到很多坑,这里记录一下.亲手测试,注意版本号!!!!! 1.下载  curl-7.43.0  libssh2-1.3.0  openssl-1.0.0s   ActivePerl5   zlib  nasm 2.  编译openssl,在编译的时候可以参考这边文章http://www.oschina.net/question/54100_138557 编译环境 vs2010 ,openssl版本 : openssl-1.0.0s(vs2010编译过没问题,其余的版本用v

Shell命令学习 之,sort,unique 文件简单排序去除重复记录

经常会碰到文件里有重复记录的场景,要么去除重复记录,要么统计下重复记录数,这些简单的功能可以通过shell命令里的sort,uniq组合实现, 比如文件a.txt记录如下 test,test1,test2 test test1 test2 test,test1,test2 abcd edfg abcd ddddd 去除重复行: sort a.txt |uniq abcd ddddd edfg test test,test1,test2 test1 test2 查找非重复行 [[email pro

简单记录个a标签点不上的bug

官网改版时碰到的问题.简单记录下: [ 问题 ] 官网index页面移动端测试时,发现底部页脚的a标签无论如何点不动. [ Debug 过程 ] 1.先是在pc端用浏览器模拟手机看了下,问题重现: 2.然后看了下"规则"和"计算后"面板(用的是FireFox,习惯了--分别对应Chrome的styles和computed),a标签本身的样式似乎是没问题的,周围也没啥问题-- 3.丢到chrome里,问题依然重现,继续懵逼-- 4.无意间关掉了移动端模拟,居然好了卧槽

使用Visual Studio 2015 编写 Asp.Net 5 应用遇到的几个坑

从asp.net 5 beta 6 一直到现在的asp.net rc1,一路使用下来,碰到不少坑.陆续记录如下. 一,发布 1,服务器端和客户端都应安装web deploy,版本目前为3.6: 2,服务器端应安装httpplatformhandler,版本目前为1.2,版本1.0不起作用: 3,服务器端开启web management服务: 4,服务器端目录结构应该如下: siteName approot logs wwwroot 然后,在IIS里,将站点目录指向wwwroot.不按这样安排目录

Subversion FAQ(常见问题解答)

转自:http://subversion.apache.org/faq.zh.html 常见问题: 为什么会有这样一个项目? 为了接管CVS的用户基础.确切的说,我们写了一个新的版本控制系统,它和CVS很相似,但是它修正了以前CVS所没有解决的许多问题.请看我们的首页. Subversion是私有软件的吗?我听说它是属于CollabNet公司的. 不是,Subversion一款开源/免费的软件.CollabNet公司为几个全职的开发人员支付薪水,并且拥有相关代码的版权,但是这个版权是一个Apac