1.
- 准备一台香港节点服务器(例如 AWS ap-east-1,或常见香港VPS)。
- 本地安装 OpenSSH、curl、openssl、jq、Postman 或 HTTP 客户端。
- 拿到服务器 root/管理账号,确认能通过 SSH 访问:ssh user@hk-ip。
- 为 API 准备域名并解析到香港服务器,便于配置 TLS(建议使用 DNS A 记录)。
2.
- 在服务器上创建虚拟环境并部署应用:python3 -m venv venv && source venv/bin/activate && pip install flask gunicorn。
- 编写简单 Flask API:app.py 提供 /api/data 接口,返回 JSON。
- 使用 Gunicorn 启动:gunicorn -w 4 -b 127.0.0.1:8000 app:app。
- 配置 Nginx 反向代理并绑定域名,proxy_pass http://127.0.0.1:8000;重载 nginx: sudo systemctl reload nginx。
3.
- 推荐使用 Let’s Encrypt 自动签发:sudo apt install certbot && sudo certbot --nginx -d your.hk.domain。
- 验证证书:openssl s_client -connect your.hk.domain:443 -servername your.hk.domain。
- 强制 HTTPS 与安全套件:在 Nginx 中开启 HSTS 与安全 ciphers。
4.
- 使用 ufw/iptables 限制管理端口,仅开放 22(SSH)、80、443 和必要的端口。
- 若只允许特定来源调取 API,可在 Nginx 或云平台上配置 IP 白名单(CIDR);在 Nginx 中用 allow/deny。
- 对外提供的 API 若需更细粒度,建议在应用层根据客户 IP 做二次校验。
5.
- 推荐服务器间调用使用 OAuth2 Client Credentials。步骤:在授权服务器(或自建 Auth 服务)注册 client_id & client_secret。
- 获取 access_token:curl -X POST -d "grant_type=client_credentials&client_id=ID&client_secret=SECRET" https://auth.hk.domain/oauth/token。
- API 验证 token:在服务端调用 introspection 或使用 JWT 验证签名。
6.
- 服务端签发 JWT(使用私钥),在请求中带 Authorization: Bearer
- 生成 RSA 密钥:openssl genpkey -algorithm RSA -out private.pem -pkeyopt rsa_keygen_bits:2048;公钥:openssl rsa -in private.pem -pubout -out public.pem。
- 服务端使用 public.pem 验签;设置合适的 exp、iat、aud、iss。必要时使用 JWK 发布公钥以便第三方验证。
7.
- mTLS:在 Nginx 上启用 client_certificate 指向 CA,验证客户端证书,适合高安全场景。
- API Key:简单场景将密钥存在请求头 X-Api-Key,但需结合 HTTPS 与 IP 白名单。
- HMAC:客户端对请求体/时间戳进行 HMAC 签名,服务端校验,防重放攻击需加入 timestamp + nonce。
8.
- 直接测试:curl -H "Authorization: Bearer
- 若 API 仅内网可访问,使用 SSH 隧道:ssh -L 8443:127.0.0.1:443 user@hk-ip,然后本地访问 https://127.0.0.1:8443。
- 使用 Postman 配置 OAuth2:在 Authorization 选择 OAuth2 -> Client Credentials,填写 token URL、client_id、secret 获取并调用。
9.
- 无法连通:先用 ping/ssh 确认网络,使用 curl -v 查看 TLS 握手错误。
- Token 无效:检查时钟偏差(NTP),确认 token 的 iss/aud/exp 与应用配置一致。
- 证书问题:openssl s_client 查看证书链,确保证书未过期且域名匹配。
10.
- 启用访问日志与应用日志并外发到集中化系统(ELK/Prometheus + Grafana)。
- 密钥定期轮换:私钥更新时使用可兼容的公钥列表(支持老/新公钥过渡)。
- 建议实现速率限制(rate limiting)与异常告警(请求异常增高或 401/403 激增)。
11.
答:推荐使用 SSH 隧道或 VPN。SSH 隧道示例:ssh -L 8443:127.0.0.1:443 user@hk-ip,然后在本地访问 https://127.0.0.1:8443 并使用正确证书/Token;或通过公司 VPN 将本地网络加入服务器内网,避免把私有接口暴露到公网。
12.
答:常见错误包括 400 invalid_grant(检查 client_id/secret 是否正确、授权模式是否支持)、401 unauthorized(检查 token URL 与证书)、token 过期或时钟不同步(同步 NTP),以及 scope 不匹配(确保请求的 scope 被授权)。
13.
答:推荐 mTLS + JWT(RS256)+ IP 白名单 + HMAC 防重放,并配合严格的防火墙与 WAF,所有密钥进行 KMS 管理并定期轮换,接入日志集中化与异常告警。