我正在尝试加密 EMR 节点之间传输的 TLS 流量。 AWS 网站上的示例使用自签名证书。
因为这一切都在我的私有(private)网络中,所以我已经生成了一个带有私钥的根 CA 证书,该证书受到严格保护。然后我有一个派生证书,可以执行 key 加密、数字签名和服务器身份验证。
我们称根 CA 证书为 A,派生证书为 B。
EMR 说我需要将一个 zip 文件上传到 s3,其中包含 2 个必需文件和一个可选文件:
需要privateKey.pem,
certificateChain.pem 是必需的
trustedCertificates.pem 是可选的
对于 privateKey.pem,我假设我可以只使用与证书 B 关联的私钥。
- 对于 certificateChain.pem,我需要证书 B 的内容和证书 A 的内容还是只需要证书 A 的内容?
- 对于 trustedCertificates.pem,我需要证书 A 还是证书 B 的内容?
最佳答案
如果您按照文档遵循此 AWS 脚本,您会发现 trustedCertificates.pem 和 certificateChain.pem 是同一个文件(通过文件副本)。
openssl req -x509 -newkey rsa:2048 -keyout privateKey.pem -out certificateChain.pem -days 365 -nodes -subj '/C=US/S=Washington/L=Seattle/O=MyOrg/OU=MyDept/CN=*.ec2.internal'
cp certificateChain.pem trustedCertificates.pem
zip -r -X certs.zip privateKey.pem certificateChain.pem trustedCertificates.pem
您通过创建根证书使事情复杂化,这是不必要的。遵循有关在 EMR 上设置 TLS 的 AWS 文档:
Secure Amazon EMR with Encryption
您上传到 S3 的 zip 文件包含三个文件:privateKey.pem、certificateChain.pem 和 trustedCertificates.pem。其中两个是同一个文件,但名称不同。
[在对证书进行很长的评论后进行编辑]
当您创建自签名根证书时,它签名的所有证书也是自签名的。通过验证链上的每个证书到根来验证证书。如果根证书不受信任,则所有证书都是不受信任的。
AWS 提供证书管理服务,您可以在其中成为自己的 CA。然而,这是非常昂贵的。如果您是大型公司、银行或金融机构等,那么这项 AWS 服务非常有用。
对于 Amazon EMR,可以使用单个自签名证书。原因是您可以完全控制使用该证书的系统。如果系统的任何部分提供公共(public)访问,您将不希望使用自签名证书。
让 OP 感到困惑的一个项目是可信证书和证书链之间的区别。在他的示例中,由于它们只是根证书而不是中间证书,因此受信任和链是同一项目。只有当他创建了另一个用于签署上一个证书的签名证书时,证书链才会不同(会有根证书和签名证书)。
关于amazon-web-services - 如何为 Amazon EMR 生成 trustedCertificates.pem 和 certificateChain.pem 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52227955/