HTTPS 接入指引
背景说明
随着移动互联网的发展,以及微信巨大的装机量所带来的访问量暴增,越来越多的运营商或其他有恶意的攻击者,在不断的增加域名劫持和链路劫持攻击,以推送广告或者其他危害用户隐私的行为。受害域名大多使用的是HTTP协议。
危害案例:
- 某攻击者曾经针对某微信公众号的链路劫持,插入广告【目前已改为HTTPS】
- 某攻击者曾经针对某理财的链路劫持,插入广告【目前已改为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一般要做以下几个工作:
- 生成服务器私钥
openssl genrsa -out server.key 1024
//运行openssl命令,生成1024位长的私钥server.key文件。如果您需要对 server.key 添加保护密码,请使用 -des3 扩展命令。
- 生成证书请求(CSR)文件
openssl req -new -key server.key -out server.csr
//利用第1步的私钥生成1个证书请求文件server.csr
- 备份私钥并申请证书
私钥文件丢失将导致证书不可用,请谨慎备份。到CA(证书签发机构)上申请证书并提交server.csr文件,等待证书签发。
- 获取服务器证书文件
证书签发通过后,将证书文件保存为server.pem
- 配置服务器证书和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化后,功能正常后可以将页面链接提交给城市服务平台,城市服务平台对页面进行功能测试和压力测试,验证无问题后进行替换上线。