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
我在 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