You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.2 KiB
4.2 KiB
生产环境公钥路径修复
问题描述
错误信息:Docker挂载卷中找不到证书文件:/www/wwwroot/file.ws/20250114/0f65a8517c284acb90aa83dd0c23e8f6.pem
正确路径:/www/wwwroot/file.ws/file/20250114/0f65a8517c284acb90aa83dd0c23e8f6.pem
问题原因:生产环境的公钥路径缺少 /file
目录前缀
修复方案
🔧 方案B:代码逻辑修正(已实施)
在生产环境的公钥处理代码中添加路径修正逻辑:
// 生产环境处理公钥路径 - 添加 /file 前缀
String pubKeyPath = payment.getPubKey();
// 如果路径不是以 /file 开头,需要添加 /file 前缀
if (!pubKeyPath.startsWith("/file/") && !pubKeyPath.startsWith("file/")) {
pubKeyPath = "file/" + pubKeyPath;
System.out.println("生产环境公钥路径修正: " + payment.getPubKey() + " -> " + pubKeyPath);
} else {
System.out.println("生产环境公钥路径: " + pubKeyPath);
}
String pubKeyFile = certificateLoader.loadCertificatePath(pubKeyPath);
📋 修复逻辑
-
开发环境:
- 固定使用
wechatpay_public_key.pem
- 路径:
dev/wechat/{tenantId}/wechatpay_public_key.pem
- 固定使用
-
生产环境:
- 检查数据库中的
pubKey
路径 - 如果不以
file/
开头,自动添加file/
前缀 - 最终路径:
file/{原始路径}
- 检查数据库中的
🎯 预期效果
修正前的路径:
数据库配置: 20250114/0f65a8517c284acb90aa83dd0c23e8f6.pem
实际查找: /www/wwwroot/file.ws/20250114/0f65a8517c284acb90aa83dd0c23e8f6.pem
结果: ❌ 文件不存在
修正后的路径:
数据库配置: 20250114/0f65a8517c284acb90aa83dd0c23e8f6.pem
路径修正: file/20250114/0f65a8517c284acb90aa83dd0c23e8f6.pem
实际查找: /www/wwwroot/file.ws/file/20250114/0f65a8517c284acb90aa83dd0c23e8f6.pem
结果: ✅ 文件找到
📊 日志输出
成功的日志:
=== 生产环境检测到公钥配置,使用RSA公钥模式 ===
公钥文件路径: 20250114/0f65a8517c284acb90aa83dd0c23e8f6.pem
公钥ID: YOUR_PUBLIC_KEY_ID
生产环境公钥路径修正: 20250114/0f65a8517c284acb90aa83dd0c23e8f6.pem -> file/20250114/0f65a8517c284acb90aa83dd0c23e8f6.pem
✅ 生产环境公钥文件加载成功: /www/wwwroot/file.ws/file/20250114/0f65a8517c284acb90aa83dd0c23e8f6.pem
✅ 生产环境RSA公钥配置成功
如果路径已经正确:
=== 生产环境检测到公钥配置,使用RSA公钥模式 ===
公钥文件路径: file/20250114/0f65a8517c284acb90aa83dd0c23e8f6.pem
公钥ID: YOUR_PUBLIC_KEY_ID
生产环境公钥路径: file/20250114/0f65a8517c284acb90aa83dd0c23e8f6.pem
✅ 生产环境公钥文件加载成功: /www/wwwroot/file.ws/file/20250114/0f65a8517c284acb90aa83dd0c23e8f6.pem
✅ 生产环境RSA公钥配置成功
🔍 兼容性
这个修复方案具有很好的兼容性:
-
向后兼容:
- 如果数据库中已经配置了正确的路径(以
file/
开头),不会进行修正 - 如果数据库中是旧的路径格式,会自动添加
file/
前缀
- 如果数据库中已经配置了正确的路径(以
-
多种路径格式支持:
20250114/xxx.pem
→file/20250114/xxx.pem
file/20250114/xxx.pem
→file/20250114/xxx.pem
(不变)/file/20250114/xxx.pem
→/file/20250114/xxx.pem
(不变)
🚀 测试验证
现在可以重新测试支付订单创建:
-
确认数据库配置:
SELECT tenant_id, pub_key, pub_key_id FROM sys_payment WHERE tenant_id = 10547 AND type = 0;
-
重新创建支付订单
-
查看日志输出:
- 关注 "生产环境公钥路径修正" 的输出
- 确认最终路径是否正确
📁 文件结构
生产环境文件结构:
/www/wwwroot/file.ws/file/
├── 20250114/
│ └── 0f65a8517c284acb90aa83dd0c23e8f6.pem
├── wechat/
│ └── 10547/
│ ├── apiclient_key.pem
│ ├── apiclient_cert.pem
│ └── public_key.pem
└── ...
🎉 修复完成
通过这个修复:
- ✅ 解决了生产环境公钥路径缺少
/file
前缀的问题 - ✅ 保持了向后兼容性
- ✅ 支持多种路径格式
- ✅ 提供了详细的日志输出用于调试
现在生产环境应该能够正确找到公钥文件,成功使用RSA公钥配置,避免证书相关错误。