R/Shiny调用RCurl请求接口报SSL certificate problem: unable to get local issuer证书错误如何解决
报错原因
该SSL证书报错是RCurl默认对HTTPS请求做证书合法性校验触发的:你访问的目标接口使用的SSL证书要么是企业自签名证书,要么是由RCurl默认根证书库未收录的CA机构签发,RCurl无法在本地信任证书列表中找到对应根证书完成有效性校验,因此抛出该错误。
报错截图

解决方案
下面给出不同适用场景的解决方法:
- 临时测试方案(生产环境禁用):直接关闭SSL证书校验,仅适合本地快速调试使用,存在中间人攻击风险
代码示例:library(RCurl) data = getURL("https://corporatewebsite.kl/ProyectosTD/getData/dfs32b98565sd65dfkjswfr8J", ssl.verifypeer = FALSE) - 生产环境推荐方案:将目标接口对应的根CA证书导出为PEM格式文件,放到项目目录后在请求中指定信任该证书
代码示例:
如果需要全局生效,可提前配置RCurl全局参数:library(RCurl) data = getURL("https://corporatewebsite.kl/ProyectosTD/getData/dfs32b98565sd65dfkjswfr8J", cainfo = "./corporate_root_ca.pem")options(RCurlOptions = list(cainfo = "./corporate_root_ca.pem")) - 替换请求库方案:换成证书处理逻辑更友好的
httr库实现请求,适配方案和RCurl逻辑一致
关闭校验(测试用)代码:
指定信任证书代码:library(httr) res <- GET("https://corporatewebsite.kl/ProyectosTD/getData/dfs32b98565sd65dfkjswfr8J", config(ssl_verifypeer = 0)) data <- content(res, as = "text")library(httr) res <- GET("https://corporatewebsite.kl/ProyectosTD/getData/dfs32b98565sd65dfkjswfr8J", ca_cert = "./corporate_root_ca.pem") data <- content(res, as = "text")
内容的提问来源于stack exchange,提问作者Edgar Céspedes Sabogal
相关产品推荐
相关产品推荐

