导入godaddy https证书在微信中打不开页面
2016-02-29 17:46:54
圣诞节在godaddy买了ssl证书,感觉全站https早晚的事,最早的方案用阿里云负载均衡搭建的,自己不用配nginx,直接在阿里那上传证书就好。
大致如下:
前端 这边
然后chrome跑的正常,safari正常,两个浏览器都会有绿色小锁。然后打开微信。打不开页面。于是就呵呵了。 用青花瓷抓包发现每次打开页面的时候都会去 godaddy这个地址 http://certificates.godaddy.com/repository/gdig2.crt去下载证书,竟然还是个http的请求,google后发现是证书链有问题,说白了就是证书需要一级一级的放在一起,断了貌似chrome他们会自己去给补全,微信貌似没有自动补全,然后就打不开了。 godaddy上下载的证书会有2个文件,一个是(随机串.crt)一个是(gd_bundle-g2-g1.crt),然后打开文本编辑器,把(随机串.crt)粘到(gd_bundle-g2-g1.crt)上面合并成一个文件。丢到服务器上。
进入全栈https时代
大致如下:
前端 这边
80端口监听后端8080端口
443端口监听后端8123端口
后端nginx这边对应
8080来的都rewrite成https请求
8213直接对应你真正的项目端口
要是还有别的域名也都给从定向过来
这样例如我的55u.me
server { server_name 55u.me ; rewrite ^(.*) https://orz-i.com$1 permanent; }
如果你要是安装的全家桶可能防火墙默认打开的,把需要的端口打开,要不访问不了。
vi /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8213 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
毕竟服务器空闲那么多,阿里的SLB还是要收费的,所以干脆都给放到自己服务器上处理https了。
然后到nginx里配置如下,并记得防火墙打开443端口
server { server_name ssl.orz-i.com; listen 443; ssl on; ssl_certificate /orz-i.com.crt; ssl_certificate_key /orz-i.com.key; ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on; root /home/wwwroot/default/case; index index.html index.php; if ( $query_string ~* ".*[\;'\<\>].*" ){ return 404; } location ~ .*\.(php|php5)?$ { #fastcgi_pass remote_php_ip:9000; fastcgi_pass unix:/dev/shm/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; }crt和key 是证书的公钥和私钥。
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ { expires 30d; }
location ~ .*\.(js|css)?$ { expires 7d; } }
然后chrome跑的正常,safari正常,两个浏览器都会有绿色小锁。然后打开微信。打不开页面。于是就呵呵了。 用青花瓷抓包发现每次打开页面的时候都会去 godaddy这个地址 http://certificates.godaddy.com/repository/gdig2.crt去下载证书,竟然还是个http的请求,google后发现是证书链有问题,说白了就是证书需要一级一级的放在一起,断了貌似chrome他们会自己去给补全,微信貌似没有自动补全,然后就打不开了。 godaddy上下载的证书会有2个文件,一个是(随机串.crt)一个是(gd_bundle-g2-g1.crt),然后打开文本编辑器,把(随机串.crt)粘到(gd_bundle-g2-g1.crt)上面合并成一个文件。丢到服务器上。
进入全栈https时代