最近又遇到一个安卓访问有问题,苹果和电脑访问正常的现象;安卓访问https失败,错误:fail ssl hand shake error。
对于这个奇葩的错误,就之前的经验,只能反思是否是证书配置错误。网上有遇到过的,但是都么有给出修改方式。
后来找到了两个检测工具:
https://www.myssl.cn/tools/check-server-cert.html
https://www.ssllabs.com/ssltest/analyze.html
通过这两种检测工具检测后,基本就知道是什么原因了,要么是协议配置不支持,要么是证书缺失。
我们遇到的情况就是中间证书缺失,当时申请的时候按照旧的方式去申请,会生成两个.cer文件。
需要将:ovroot.cer中间证书copy出来贴到server.cer证书的后面,问题就解决了。
附带Nginx的ssl配置手册:
一、证书整理
ovroot.cer文件为服务商中间证书,server.cer为服务证书,需要将两个证书并使用,否则会出现安卓无法访问,会出现fail ssl hand shake error这个错误。
将ovroot.cer的证书复制出来贴到server.cer内容后面,不要有空行;
二、Nginx的配置如下:
server {
listen 443;
server_name spdwechat.ctyun.cn; #对应的主机域名
ssl on;
ssl_certificate yun_cert/server.cer;//证书目录
ssl_certificate_key yun_cert/server.key; #私钥
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://cpsapi; #实际的程序监听地址
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
access_log /server/logs/nginx/cps_rest_access.log main;
}
要支持TLSv1.2协议;