微信城市服务文档

HTTPS 接入指引

背景说明

随着移动互联网的发展,以及微信巨大的装机量所带来的访问量暴增,越来越多的运营商或其他有恶意的攻击者,在不断的增加域名劫持和链路劫持攻击,以推送广告或者其他危害用户隐私的行为。受害域名大多使用的是HTTP协议。

危害案例:

  1. 某攻击者曾经针对某微信公众号的链路劫持,插入广告【目前已改为HTTPS】
  2. 某攻击者曾经针对某理财的链路劫持,插入广告【目前已改为HTTPS】

HTTPS接入指引

为了增强城市服务平台的安全性,减少页面被劫持的风险,提升用户体验,城市服务将全面升级为HTTPS的接入方式。各个服务的第三方页面需要全部接入HTTPS。
由于HTTPS的安全特性,HTTPS页面中如果有HTTP的资源链接(js,css,img,动态资源),将被微信内置浏览器拦截,导致页面资源加载不了。因此需要第三方对页面中所依赖的资源做HTTPS化。

  • 静态资源文件接入HTTPS
    静态资源文件(js,css,img)需要接入支持HTTPS的cdn,如果资源所在的cdn如果不支持HTTPS,可以参考下面的指引自己搭建支持HTTPS的服务器。

  • 动态资源接入HTTPS
    对于动态资源(php,jsp,cgi)需要资源所在服务器支持HTTPS的能力。服务器配置HTTPS一般要做以下几个工作:
  1. 生成服务器私钥
    openssl genrsa -out server.key 1024
    //运行openssl命令,生成1024位长的私钥server.key文件。如果您需要对 server.key 添加保护密码,请使用 -des3 扩展命令。
  2. 生成证书请求(CSR)文件
    openssl req -new -key server.key -out server.csr
    //利用第1步的私钥生成1个证书请求文件server.csr
  3. 备份私钥并申请证书
    私钥文件丢失将导致证书不可用,请谨慎备份。到CA(证书签发机构)上申请证书并提交server.csr文件,等待证书签发。
  4. 获取服务器证书文件
    证书签发通过后,将证书文件保存为server.pem
  5. 配置服务器证书和HTTPS(以nginx为例)
    复制server.key、server.pem文件到Nginx安装目录下的conf目录。
    打开Nginx安装目录下conf目录中的nginx.conf文件,修改server的配置如下
    server { 
    listen 443;
    server_name localhost;
    ssl on;
    ssl_certificate server.pem;
    ssl_certificate_key server.key;
    ssl_session_timeout 5m;
    ssl_protocols SSLv3 TLSv1;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;
    location / {
    root html;
    index index.html index.htm;
    }
    }
  • 页面测试
    当页面所有的资源都https化后,功能正常后可以将页面链接提交给城市服务平台,城市服务平台对页面进行功能测试和压力测试,验证无问题后进行替换上线。