openssl 检查失败,带有 terraform oci 提供程序的私钥

openssl check fails with Private key for terraform oci provider

我在 azure 管道代理(使用 terraform oci 提供程序)中 运行 宁 terraform plan 时遇到错误。

 Error: can not create client, bad configuration: did not find a proper configuration for private key
│ 
│   with provider["registry.terraform.io/hashicorp/oci"],
│   on provider.tf line 4, in provider "oci":
│    4: provider "oci" {

这是provider.tf:

## Provider file
## Define the provider

provider "oci" {
  tenancy_ocid     = var.tenancy_ocid
  user_ocid        = var.user_ocid
  fingerprint      = var.fingerprint
  private_key_path = var.private_key_path
  region           = var.region
}

所有变量值都使用环境变量传递,如$TF_VAR_private_key_path。私钥文件添加到管道库安全文件中,并通过任务运行在管道时下载到代理。

所以检查了文件是否存在于代理中,它就在那里。 尝试使用 cat 命令打印 .pem 文件。输出似乎很好。

然后我尝试用 openssl 命令检查 .pem 文件,它 returns 错误:

$ openssl rsa -in $TF_VAR_private_key_path -check

unable to load Private Key
139790939505984:error:0D07209B:asn1 encoding routines:ASN1_get_object:too long:../crypto/asn1/asn1_lib.c:91:
139790939505984:error:0D068066:asn1 encoding routines:asn1_check_tlen:bad object header:../crypto/asn1/tasn_dec.c:1137:
139790939505984:error:0D07803A:asn1 encoding routines:asn1_item_embed_d2i:nested asn1 error:../crypto/asn1/tasn_dec.c:309:Type=RSAPrivateKey
139790939505984:error:04093004:rsa routines:old_rsa_priv_decode:RSA lib:../crypto/rsa/rsa_ameth.c:133:
139790939505984:error:0D07209B:asn1 encoding routines:ASN1_get_object:too long:../crypto/asn1/asn1_lib.c:91:
139790939505984:error:0D068066:asn1 encoding routines:asn1_check_tlen:bad object header:../crypto/asn1/tasn_dec.c:1137:
139790939505984:error:0D07803A:asn1 encoding routines:asn1_item_embed_d2i:nested asn1 error:../crypto/asn1/tasn_dec.c:309:Type=PKCS8_PRIV_KEY_INFO
139790939505984:error:0907B00D:PEM routines:PEM_read_bio_PrivateKey:ASN1 lib:../crypto/pem/pem_pkey.c:88:

任何人都可以帮助理解 openssl 的实际问题吗?

注:

当 api_key 文件通过存储库文件而不是安全文件直接在目录中提供时,不会出现此类错误。可能是安全文件向私钥文件添加了额外的编码??

错误已修复。我比较了两个 api 文件的内容——一个是从安全文件 ($TF_VAR_private_key_path) 下载到管道代理的,另一个是作为文件添加到存储库中的 (/home/vsts/work/1/s/terraform/api_keys/oci_api_key.pem).

cat $TF_VAR_private_key_path
cat /home/vsts/work/1/s/terraform/api_keys/oci_api_key.pem
openssl rsa -in $TF_VAR_private_key_path -check
openssl rsa -in /home/vsts/work/1/s/terraform/api_keys/oci_api_key.pem -check

问题是 我添加到 Azure 管道库的安全文件 的 api 密钥文件中缺少一些行。将正确的 api 密钥文件上传到安全文件后,一切正常!

This 博客说明了此错误的一些原因。

If you get an error message such as provider.oci: can not create client, bad configuration: did not find a proper configuration for private key, you might have missed one of these things:

  • Not specifying either a private_key or private_key_path in the config
  • Specifying a private_key_path that’s not a valid path to a private key file
  • Not specifying a private_key_password for a private key that’s encrypted
  • Specifying an incorrect private_key_password for an encrypted private key
  • Set up your API key incorrectly