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

从开发者指南 :

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

我想要做的是在S3中托pipe静态文件,并通过https://app.mysite.com/filename.jpg访问它们

似乎虚拟主机风格的url可能不能很好地与SSL。 任何想法在这方面“定制证书validation”是什么意思?

另请参阅堆栈溢出 。

这是S3的SSL证书:

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

证书上的通用名称是*.s3.amazonaws.com ,它不会与app.mysite.com匹配。 因此,在使用HTTPS(至less需要validation)时,不能使用自己的主机名(通过CNAMElogging),因为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会。

我假设他们提到的自定义证书validation是如果你正在写自己的客户端访问S3,这是不是这里的情况。

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

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