一、核心安全前提支付敏感信息支付宝私钥、商户 APPID、微信 mchId、APIv3 密钥、支付证书序列号、回调地址等禁止硬编码在 yml、代码、Git统一存放配置中心配套加密存储、权限隔离、环境隔离。 两种配置中心通用安全原则敏感字段加密存储明文不落地数据库 / 磁盘开发 / 测试 / 生产三套环境配置完全隔离细粒度权限管控仅支付服务能读取支付配置服务本地不缓存明文密钥日志输出区分普通明文配置、加密密钥配置两套读取逻辑。第一部分 Nacos 存储支付敏感参数1. Nacos 前置准备1.1 开启 Nacos 内置加密功能Nacos 2.2.3 自带 RSA 加密插件无需额外组件低版本需接入第三方加解密工具。登录 Nacos 后台命名空间划分namespace-dev开发环境支付宝沙箱、微信测试商户namespace-test测试环境namespace-prod生产正式商户隔离最重要新建分组PAY_GROUP所有支付配置统一放该分组区分商品、用户模块配置。1.2 生成加密密钥后台工具生成密文Nacos 后台 → 配置管理 → 加密工具加密类型选择RSA输入敏感明文微信 v3 密钥、支付宝商户私钥生成密文格式固定{RSA}xxxxxx以标记该字段为加密内容。1.3 新建支付配置文件DataIdpay-config.yaml命名空间选择对应环境分组 PAY_GROUP配置内容yaml# 支付宝配置普通明文 alipay: app-id: 2021001117648123 gateway-url: https://openapi.alipay.com/gateway.do notify-url: https://xxx.com/api/pay/alipay/notify return-url: https://xxx.com/order/success charset: utf-8 sign-type: RSA2 # 加密存储禁止明文 private-key: {RSA}cxxxxxxxxxxxxxxx public-key: {RSA}dxxxxxxxxxxxxxxx # 微信支付V3配置 wechat-pay: mch-id: 1603212345 mch-serial-no: 34F97A6C081234567890ABCDEF notify-url: https://xxx.com/api/pay/wxpay/notify private-key-path: classpath:cert/apiclient_key.pem platform-cert-path: classpath:cert/platform_cert.pem # 32位v3密钥加密存储 api-v3-key: {RSA}exxxxxxxxxxxxxxxx证书文件 pem 无法文本存储仍放在服务器本地配置中心只存文件路径。2. SpringBoot 项目接入 Nacos自动解密敏感配置2.1 Maven 引入 Nacos 依赖xml!-- Nacos配置中心 -- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-config/artifactId /dependency !-- nacos加密解析依赖自动识别{RSA}前缀 -- dependency groupIdcom.alibaba.nacos/groupId artifactIdnacos-client/artifactId /dependency2.2 bootstrap.yml 配置 Nacos 连接必须 bootstrap优先加载配置yamlspring: cloud: nacos: config: server-addr: 127.0.0.1:8848 # 对应环境命名空间ID namespace: prod-namespace-id group: PAY_GROUP # 加载支付配置文件 extension-configs: - data-id: pay-config.yaml refresh: true # Nacos加密RSA私钥项目本地配置不存nacos encryption: rsa: private-key: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDxxx关键点Nacos 解密用的 RSA 私钥放在项目本地 bootstrap不存入配置中心形成双向隔离。2.3 支付配置读取类自动解密java运行Data Configuration ConfigurationProperties(prefix alipay) public class AlipayConfig { private String appId; private String gatewayUrl; private String notifyUrl; private String returnUrl; private String charset; private String signType; // Nacos客户端自动解析{RSA}密文注入明文 private String privateKey; private String publicKey; }无需手动写解密代码nacos-client 识别{RSA}前缀自动解密注入字段。3. Nacos 配套安全管控权限隔离生产 namespace 仅运维、支付开发账号可读普通开发无查看权限关闭匿名访问 Nacos所有登录开启账号密码。配置变更审计Nacos 记录每一条配置修改人、修改时间、版本密钥修改自动钉钉告警。禁止本地 yml 写支付密钥application.yml 只保留通用业务配置所有支付参数统一从 Nacos 拉取。动态刷新refresh: true修改商户密钥无需重启服务自动生效。日志脱敏自定义日志拦截器打印 AlipayConfig、WechatPayConfig 时过滤 privateKey、apiV3Key 明文。4. 微信证书文件配套方案生产服务器新建加密目录/opt/pay-cert权限chmod 600部署脚本从加密文件服务器拉取 pem 证书不提交代码库Nacos 仅配置文件路径密钥文件脱离配置中心独立管控。第二部分 Apollo 配置中心存储支付敏感参数Apollo 无内置加密采用Apollo 加密组件 独立加解密工具实现敏感密钥加密存储。1. Apollo 环境与命名空间规划环境划分dev/test/pro生产环境独立 Apollo 集群不和测试共用新建私有 NamespacePayConfig权限仅支付负责人可编辑关闭公共 Namespace 写入权限防止其他人篡改支付参数。2. Apollo 加密组件接入apollo-crypto2.1 引入加密依赖xmldependency groupIdcom.ctrip.framework.apollo/groupId artifactIdapollo-client/artifactId /dependency !-- Apollo加密扩展包 -- dependency groupIdcom.github.liuweijw/groupId artifactIdapollo-crypto-spring-boot-starter/artifactId version1.2.0/version /dependency2.2 本地 application.yml 配置加解密密钥加解密主密钥保存在服务器环境变量不存入 Apolloyamlapollo: crypto: # 从服务器环境变量读取不写死文件 secret-key: ${PAY_CRYPTO_SECRET}2.3 Apollo 后台配置参数明文转密文存储使用工具类将支付宝私钥、微信 v3 密钥加密密文前缀自定义crypto:Apollo PayConfig 命名空间配置properties# 明文普通配置 alipay.app-id2021001117648123 alipay.notify-urlhttps://xxx.com/api/pay/alipay/notify # 加密敏感配置前缀标记 alipay.private-keycrypto:xxxxxxxxxxxx wechat-pay.api-v3-keycrypto:yyyyyyyyyyyy2.4 自定义注解自动解密字段自定义CryptoValue注解配合 Apollo 加密 starter 自动解密java运行Data Configuration ConfigurationProperties(prefix wechat-pay) public class WechatPayConfig { private String mchId; private String mchSerialNo; private String notifyUrl; private String privateKeyPath; private String platformCertPath; CryptoValue private String apiV3Key; }框架自动识别crypto:前缀使用本地密钥解密后注入明文。3. Apollo 安全增强方案生产 Apollo 开启管理员审批流修改支付密钥必须运维审批才能发布开启配置推送日志密钥变更实时推送告警生产 Apollo 数据库加密存储所有配置防止拖库泄露密钥服务启动时校验环境变量PAY_CRYPTO_SECRET缺失直接拒绝启动避免无密钥解密。第三部分 Nacos / Apollo 通用生产安全规范1. 环境严格隔离资金安全核心开发支付宝沙箱、微信测试号独立一套密钥生产企业正式商户独立命名空间 / 集群禁止测试环境读取生产配置禁止通过配置中心切换网关地址线上网关硬编码固定正式地址。2. 密钥分层隔离逻辑配置中心存储加密后的支付业务密钥支付宝私钥、微信 v3 key项目本地 / 服务器环境变量存储配置中心解密主密钥RSA/AES 密钥证书 pem 文件服务器独立加密目录存放完全脱离配置中心 三层密钥分离单一节点泄露不会导致支付资金被盗。3. 禁止的危险操作❌ 配置中心存放明文私钥、API 密钥❌ 开发环境复用生产商户配置❌ 解密主密钥写入代码、提交 Git❌ 日志直接打印完整支付配置实体类❌ 匿名访问配置中心后台。4. 故障兜底方案配置中心宕机兜底服务器本地备用配置文件全部加密服务启动降级读取本地密文密钥定期轮换每 90 天更换支付宝 RSA 密钥、微信 APIv3 密钥配置中心动态刷新无需重启配置备份每日自动导出加密配置备份不导出明文。第四部分 两种配置中心选型对比表格特性NacosApollo内置加密自带 RSA 加密开箱即用无内置需第三方加密组件权限管控命名空间 分组双层隔离Namespace 独立权限 审批流推荐场景微服务 SpringCloud 电商简单快速接入大型多团队、严格配置变更审批企业敏感参数维护成本低后台直接生成密文高需本地工具加密后录入后台支付场景首选中小型电商 SP 项目中大型集团电商多商户支付系统