如何在 Amazon S3 上编写自定义证书验证逻辑?

如何在 Amazon S3 上编写自定义证书验证逻辑?

开发者指南

当使用带有 SSL 的虚拟托管式存储桶时,SSL 通配符证书仅匹配不包含句点的存储桶。要解决此问题,请使用 HTTP 或编写您自己的证书验证逻辑。

我想做的是在 S3 上托管静态文件,并通过以下方式访问它们https://app.mysite.com/filename.jpg

虚拟托管样式的 URL 似乎无法与 SSL 很好地兼容。您知道“自定义证书验证”在此上下文中是什么意思吗?

另请参阅 Stack Overflow

答案1

这是 S3 的 SSL 证书:

subject=/C=US/ST=Washington/L=Seattle/O=Amazon.com Inc./CN=*.s3.amazonaws.com

证书上的通用名称是*.s3.amazonaws.com,与 不匹配app.mysite.com。因此,在使用 HTTPS 时,您无法将自己的主机名(通过 CNAME 记录)用于 S3(至少如果您希望它进行验证),因为 S3 的 SSL 证书不包含(也不能包含)您的主机名。您必须改用主机名<bucket>.s3.amazonaws.com

现在,从技术上讲,SSL 证书主机名中的通配符仅匹配主机名的单个部分,因此上述证书将匹配foo.s3.amazonaws.com,但不会匹配foo.bar.s3.amazonaws.com。这就是为什么文档说存储桶名称不能包含句点,因为app.mysite.com.s3.amazonaws.com不会匹配证书,但app-mysite.s3.amazonaws.com会匹配。

我认为他们所指的自定义证书验证是指您正在编写自己的访问 S3 的客户端,但这里的情况并非如此。

编辑:正如 @ceejayoz 指出的那样,您仍然可以对名称中带有句点的存储桶使用路径样式访问,但是,您应该使用正确的区域特定主机名因为 AWS 在发出 DNS 请求时无法选择正确的端点。

https://s3-us-west-1.amazonaws.com/app.mysite.com/

相关内容