使用 HTTPS 的数据接入方案
最后更新于:2018-08-14 15:15:02
神策分析致力于帮助客户搭建开放的数据平台,便于客户更深入的利用数据。本节文档涉及较多技术细节,适用于对相关功能有经验的用户参考。如果对文档内容有疑惑,请咨询您的数据咨询顾问获取一对一的协助。
默认情况下,数据接入 API 使用的是 HTTP 协议,若希望进一步提高数据传输层的安全性,或是需要在 HTTPS 站点上部署神策分析 JavaScript SDK 正常发送数据,可以参考本文档配置 HTTPS 接入。
1. Cloud 版使用 HTTPS 的数据接入方案
神策分析 Cloud 版已经提供 HTTPS 数据接入地址。
例如 HTTP 数据接入地址为:
http://test.cloud.sensorsdata.cn:8106/sa?token=xxx
它对应的 HTTPS 数据接入地址使用 4006 端口:
https://test.cloud.sensorsdata.cn:4006/sa?token=xxx
即 scheme 由 HTTP 改为 HTTPS,端口由 8106 改为 4006。
或使用数据接收专用域名:
https://test.datasink.sensorsdata.cn/sa?token=xxx
使用 datasink
域名可以不显式指定端口号,即 443 为数据接收服务端口。
2. 私有部署版使用 HTTPS 的数据接入方案
注意事项:
- 使用 HTTPS 加密传输需要提供 SSL 证书,神策不提供任何 SSL 证书。该证书可以通过多种渠道获取,若使用自签证书请确保客户端信任该证书;
- 使用 HTTPS 请关注证书的过期时间,若证书过期可能会导致数据无法发送成功;
2.1 在进行服务转发时启用 HTTPS
强烈建议采用这种方式,具体请参考 服务转发配置。
2.2 直接在神策服务的 Nginx 上配置 HTTPS
对于单机版,这里也提供直接在神策分析的 Nginx 上配置 HTTPS 的方案,该方案需要将 SSL 私钥放置于我们的机器上,且加密算法的选择受限于使用的 Nginx 二进制编译时的 OpenSSL 版本。请注意:
- HTTPS 的 TLS/SSL 层需要消耗额外 CPU、带宽资源,一般只用于测试或者小流量的应用场景;
在神策分析的 Nginx 上配置 HTTPS 可以参考以下步骤:
- 登录部署神策分析机器,切换到 root 用户;
切换到部署 Nginx 的目录:
cd /home/sa_cluster/sa/nginx
创建证书目录和自定义配置目录:
mkdir -p /home/sa_cluster/sa/nginx/cert mkdir -p /home/sa_cluster/sa/nginx/conf.d
Nginx 启动时会加载 conf.d 下的所有配置文件,文件内应该只包含 server 代码块;
将证书公钥和私钥放置到 cert 目录下;
在 conf.d 中创建 https.conf 内容如下:
server { listen 4006 ssl; # 端口号,可自定义 server_name cloud_test.sensorsdata.cn; # 域名 access_log off; ssl on; # 开启 ssl # 配置 ssl 证书信任链 ssl_certificate /home/sa_cluster/sa/nginx/cert/fullchain.pem; # 配置 ssl 私钥 ssl_certificate_key /home/sa_cluster/sa/nginx/cert/privkey.pem; # 其他 ssl 参数可以参考 https://mozilla.github.io/server-side-tls/ssl-config-generator/ ,例如: # ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; # ssl_prefer_server_ciphers on; # ssl_session_timeout 5m; # ssl_session_cache shared:SSL:50m; # 以上 ssl 配置可视情况添加、修改 location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 单机版 proxy_pass http://127.0.0.1:8106; # 集群版 # proxy_pass http://127.0.0.1:8106; } }
其他 SSL 配置可以参考: https://mozilla.github.io/server-side-tls/ssl-config-generator/
在 Nginx 目录下执行如下命令测试配置是否正确:
sbin/nginx -t
如果出现如下提示说明配置正确:
nginx: the configuration file ./conf/nginx.conf syntax is ok nginx: configuration file ./conf/nginx.conf test is successful
如果失败需要修改配置再重新测试配置;
配置测试并检查无误后,在 Nginx 目录下执行如下命令使 Nginx 重新加载配置:
sbin/nginx -s reload