使用Python向AWS ACM导入OpenSSL证书时遇ValidationException错误求助
解决AWS ACM导入证书时的ValidationException错误
我一眼就看出问题出在哪了——你给ACM的import_certificate API传的是文件名,但这个API要求的是证书/密钥的原始文本内容!
问题根源
AWS ACM的Certificate、PrivateKey和CertificateChain参数需要接收的是字符串格式的证书内容(比如PEM格式的文本),而不是文件名。你直接传'sample.vpn.crt'这种字符串,ACM会把它当作证书内容解析,自然会因为格式完全不对,触发“包含多个证书”的验证错误。
修复后的代码
你需要先读取本地文件的内容,再把内容传给API。修改后的代码如下:
import boto3 client = boto3.client('acm') def lambda_handler(event, context): # 读取证书文件的原始内容 with open('sample.vpn.crt', 'r') as cert_file: cert_content = cert_file.read() # 读取私钥文件的原始内容 with open('sample.vpn.key', 'r') as key_file: key_content = key_file.read() # 读取证书链文件的原始内容 with open('ca.crt', 'r') as chain_file: chain_content = chain_file.read() # 调用ACM导入接口 response = client.import_certificate( Certificate=cert_content, PrivateKey=key_content, CertificateChain=chain_content ) return response
额外注意事项
- 如果你是在Lambda中运行,要确保这些证书文件已经打包到Lambda的部署包里,或者通过S3等方式加载到执行环境中,否则会出现文件找不到的错误。
- 私钥必须是未加密的:如果你的私钥是加密状态(比如生成时设置了密码),需要先用OpenSSL解密:
openssl rsa -in sample.vpn.key -out decrypted_sample.vpn.key - 证书链要保证顺序正确:用户证书在前,然后是中间CA证书,最后是根CA证书(ACM通常会自动调整顺序,但手动保证正确能避免不必要的问题)
内容的提问来源于stack exchange,提问作者Tine
相关产品推荐
相关产品推荐

