GitHub Actions中Ubuntu环境R包检查遇SSL连接错误求助
解决GitHub Actions Ubuntu环境下R代码SSL连接
unsafe legacy renegotiation disabled错误 问题背景
以下R代码在Windows和macOS环境可正常执行,但在GitHub Actions的Ubuntu runner中下载文件时触发unsafe legacy renegotiation disabled错误:
tf <- tempfile() this_url <- "https://webfs.oecd.org/piaac/puf-data/SAS/SAS7BDAT/prgusap1_2012.sas7bdat" download.file( this_url , tf , mode = 'wb' )
尝试更换download.file替代方案、设置ssl.verifypeer=FALSE均无法解决问题。
问题原因
目标服务器使用了旧版TLS协商协议,而Ubuntu runner默认使用的新版OpenSSL(3.x及以上)为了安全,默认禁用了不安全的旧版协商机制,导致连接失败。ssl.verifypeer=FALSE仅关闭证书验证,无法解决协议不兼容的问题。
解决方案
方案1:修改OpenSSL配置,允许旧版协商
在GitHub Actions的Workflow文件(如r.yml)中,添加配置OpenSSL的步骤后再运行R脚本:
jobs: build: runs-on: ubuntu-latest steps: # 其他步骤(如checkout、安装R依赖)... - name: Configure OpenSSL for legacy renegotiation run: | echo "Options = UnsafeLegacyRenegotiation" > ~/.openssl_legacy.cnf echo "OPENSSL_CONF=$HOME/.openssl_legacy.cnf" >> $GITHUB_ENV - name: Run R script run: Rscript your_script.R
方案2:使用curl命令绕过R的SSL处理
直接通过shell调用curl下载文件,避免R内置SSL客户端的限制:
修改R代码如下:
tf <- tempfile(fileext = ".sas7bdat") this_url <- "https://webfs.oecd.org/piaac/puf-data/SAS/SAS7BDAT/prgusap1_2012.sas7bdat" # curl的-L参数处理重定向,-o指定输出文件,shQuote避免路径/URL含特殊字符报错 system(paste0("curl -L -o ", shQuote(tf), " ", shQuote(this_url))) # 后续可继续处理文件,比如用haven包读取SAS数据 # library(haven) # df <- read_sas(tf)
内容的提问来源于stack exchange,提问作者Anthony Damico
相关产品推荐
相关产品推荐

