调用UploadServerCertificate操作时发生客户端错误(MalformedCertificate):私钥处于无法识别的格式

时间:2015-04-16 09:38:05

标签: ssl amazon-web-services openssl ssl-certificate amazon-cloudfront

我正在尝试在AWS coudfront上设置SSL,但在运行以下命令时出现此错误A client error (MalformedCertificate) occurred when calling the UploadServerCertificate operation: Private key was in an unrecognized格式:

aws iam upload-server-certificate --server-certificate-name domain.tld --certificate-body file:///home/khine/certs/14595113.crt --private-key file:///home/khine/certs/domain.key --certificate-chain file:///home/khine/Sandboxes/Business/certs/domain.tld.bundle.crt --path /cloudfront/domain.tld/

这就是我设置我的文件的方式:

openssl ecparam -out domain.key -name secp384r1 -genkey
openssl req -new -sha256 -key doamin.key -nodes -out domain.tld_ssl.csr

然后我使用创建的csr文件来获取我的域的证书。

我收到了以下文件:

root@www:/etc/ssl/certs # ls
14595113.crt
COMODOECCExtendedValidationSecureServerCA.crt
AddTrustExternalCARoot.crt
COMODOECCAddTrustCA.crt
domain.tld.bundle.crt

来自https://rasmith.me.uk/2014/07/27/So-You-Want-To-Be-Secure/

规定的三个文件是;

  • 您的PEM格式的服务器证书。
  • PEM格式的私钥。
  • 证书链文件。

当我尝试将我的密钥转换为PEM格式时,出现以下错误:

# openssl rsa -in domain.key -outform PEM -out domain_pem.key
34379118248:error:0607907F:digital envelope routines:EVP_PKEY_get1_RSA:expecting an rsa key:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/evp/p_lib.c:288:

Google会返回此http://openssl.6102.n7.nabble.com/EVP-PKEY-get1-RSA-expecting-an-rsa-key-td46677.html

但没有人回答。

有关如何将密钥转换为PEM格式的任何建议,或者如果我在我的程序中遗漏了某些内容,我们将不胜感激。

3 个答案:

答案 0 :(得分:1)

只需从私钥文件中删除 EC PARAMETERS 部分

即可

您的密钥需要标题 ----- BEGIN EC PRIVATE KEY -----

和页脚 -----结束EC私钥-----

只需从密钥文件中删除前三行

即可

答案 1 :(得分:0)

对于那些认为其证书正确但仍然面临此问题的人,请浏览到存在证书(PEM编码)的位置,然后尝试上传:

aws iam upload-server-certificate --server-certificate-name enterprise-dev-iflb --certificate-body file://iflb-public-key.pem --private-key file://iflb-no-path-phrase-key.pem

答案 2 :(得分:0)

我遇到了同样的错误。事实证明,我从 p12 密钥库生成私钥的方式不正确。然后我使用这个命令(导出未加密的私钥):

openssl pkcs12 -in keystore.p12 -nodes -nocerts -out cert.pem

我的命令成功了。

aws iam upload-server-certificate --server-certificate-name elastic-beanstalk-x509 --certificate-body file://cert.crt --private-key file://cert.pem