Azure流水线中Terraform OCI提供商私钥OpenSSL校验失败问题
报错根本原因分析
1. 核心问题
你遇到的OpenSSL ASN.1编码报错,本质是Azure DevOps流水线库的安全文件存储机制会对上传的文件进行额外格式处理,和你本地仓库中的原始私钥文件格式不一致,导致OpenSSL、Terraform OCI提供商无法识别PEM格式的私钥结构。
2. 具体常见诱因
- 上传安全文件时平台自动转换换行符:将Unix格式的
\n替换为Windows格式的\r\n,破坏了PEM文件的头尾标识结构 - 安全文件被平台额外做了Base64编码:下载到代理节点的文件是编码后的值,不是原始PEM明文内容
- 私钥文件被自动添加了UTF-8 BOM头:PEM解析器无法识别BOM头,会将其当做文件内容处理,导致ASN.1解码失败
验证与修复方案
- 先确认文件是否被篡改:在流水线中添加任务输出安全文件的MD5值,和本地正常私钥文件的MD5值对比
md5sum $TF_VAR_private_key_path
如果两者结果不一致,即可确认安全文件在存储/下载过程中被修改。
2. 格式清理修复:在下载安全文件的任务后,添加如下脚本任务处理文件格式
# 移除文件头部的UTF-8 BOM标识 sed -i '1s/^\xEF\xBB\xBF//' $TF_VAR_private_key_path # 将换行符统一为Unix格式 dos2unix $TF_VAR_private_key_path # 如验证发现文件被Base64编码,额外执行解码操作 # base64 -d $TF_VAR_private_key_path > fixed_private_key.pem && mv fixed_private_key.pem $TF_VAR_private_key_path
- 校验修复后的私钥文件
openssl rsa -in $TF_VAR_private_key_path -check
校验通过后再执行terraform plan即可恢复正常。
内容的提问来源于stack exchange,提问作者AnjK
相关产品推荐
相关产品推荐

