![如何在 Amazon S3 上编写自定义证书验证逻辑?](https://linux22.com/image/564628/%E5%A6%82%E4%BD%95%E5%9C%A8%20Amazon%20S3%20%E4%B8%8A%E7%BC%96%E5%86%99%E8%87%AA%E5%AE%9A%E4%B9%89%E8%AF%81%E4%B9%A6%E9%AA%8C%E8%AF%81%E9%80%BB%E8%BE%91%EF%BC%9F.png)
从开发者指南:
当使用带有 SSL 的虚拟托管式存储桶时,SSL 通配符证书仅匹配不包含句点的存储桶。要解决此问题,请使用 HTTP 或编写您自己的证书验证逻辑。
我想做的是在 S3 上托管静态文件,并通过以下方式访问它们https://app.mysite.com/filename.jpg
虚拟托管样式的 URL 似乎无法与 SSL 很好地兼容。您知道“自定义证书验证”在此上下文中是什么意思吗?
答案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/