重装R后HTTR请求无法加载PEM证书问题求助
问题分析与解决方案
核心问题
你的代码存在关键错误:openssl::write_pem() 默认返回PEM格式字符串,而非将证书/密钥写入文件。但 httr::config() 的 sslcert 和 sslkey 参数要求传入文件路径,不是字符串内容。这就是重装R后脚本失效的原因(之前可能存在同名文件,或误将字符串变量当作文件路径却恰好匹配)。
解决步骤
1. 将证书和密钥写入实际文件
修改证书生成代码,明确指定写入文件路径:
cert <- openssl::read_p12(file = "Data/certificate.pfx", password = "somepassword") # 将证书和密钥写入本地文件(可替换为自定义路径) openssl::write_pem(cert$cert, file = "my_cert.pem") openssl::write_pem(cert$key, file = "my_key.pem")
2. 验证文件存在性
运行以下代码确认文件是否生成成功:
# 检查文件是否存在 file.exists("my_cert.pem") file.exists("my_key.pem")
如果返回 FALSE,排查:
- 当前工作目录是否正确(用
getwd()查看),建议改用绝对路径(例如C:/Projects/my_cert.pem或/home/user/my_cert.pem) Data/certificate.pfx的路径是否正确,确保pfx文件能被正常读取
3. 修正GET请求的config参数
确保传入的是正确的文件路径:
conn <- GET(url = "testurl", add_headers(header2), config(sslcert = "my_cert.pem", sslkey = "my_key.pem"), content_type_json(), accept_json())
如果密钥仍带有密码保护(通常read_p12后密钥会移除密码,若未移除),需在config中添加 sslkey_password = "your_key_password" 参数。
4. 额外排查点
- 检查openssl和curl包版本:尝试重装最新稳定版,或匹配之前工作时的版本
- 系统OpenSSL兼容性:Windows用户确认RTools的OpenSSL组件已正确安装;Linux/macOS用户检查系统openssl版本是否正常
内容的提问来源于stack exchange,提问作者tpscp
相关产品推荐
相关产品推荐

