Seb*_*ber 5 dns https cname amazon-s3 amazon-web-services
我想在法兰克福区创建一个S3存储桶,并使用URL访问这些文件: https://files.stample.co/filename
所以我同时想要HTTPS和自定义DNS别名(CNAME).
根据我的理解,亚马逊有一个URL的通配符证书https://*.s3.amazonaws.com.
所以这个通配符将:
https://stample-files.s3.amazonaws.com https://files.stample.co.s3.amazonaws.com所以我理解并通过其他StackOverflow 帖子确认的是,如果我希望SSL工作,我必须使用没有点的存储桶名称,否则带有通配符的Amazon证书将与存储区域不匹配.
在此S3文档,下Customizing Amazon S3 URLs with CNAMEs段:
根据您的需要,您可能不希望"s3.amazonaws.com"出现在您的网站或服务上.例如,如果您在Amazon S3上托管您的网站图像,您可能更喜欢http://images.johnsmith.net/而不是http://johnsmith-images.s3.amazonaws.com/.
存储桶名称必须与CNAME相同.因此,如果创建了一个CNAME来将images.johnsmith.net映射到images.johnsmith,那么http://images.johnsmith.net/filename将与http://images.johnsmith.net.s3.amazonaws.com/filename相同..net.s3.amazonaws.com.
这似乎是出于技术原因,否则亚马逊无法知道我们尝试定位的存储桶:
由于Amazon S3仅看到原始主机名www.example.com,并且不知道用于解析请求的CNAME映射,因此CNAME和存储桶名称必须相同.
所以我在这里理解的是,为了使CNAME起作用,我们必须在bucketname中使用点.
如果我在桶名中使用点:
如果我不在桶名中使用点:
我已经测试了两种情况,无法使SSL和CNAME一起工作.
我能做些什么来使两者都有效?在我看来,我想要实现的并不是很花哨......
Mic*_*bot 12
根据您的意思,您可以同时执行这两项操作,但这需要更改您的方法并了解某些S3内部,或者理解为什么您尝试的内容不可能发挥作用.
首先,澄清一下,当我说你可以做到这两点时,我假设你不要指望你可以创建一个名为"example.com"的存储桶然后能够访问存储桶https://example.com.
如果这是您想要或期望的,那么您就错过了一些基本的SSL.
对于提供SSL的Web服务器,它必须具有由受信任的证书颁发机构签名的SSL证书.此证书不仅包含用于加密的公钥,还包含有效的主机名,并且不适用于其他主机名.SSL不仅提供加密,还可以保证您访问的网站确实是您认为的网站.对于s3,证书中的主机名是*.s3.amazonaws.com和一些区域变体,我将在下面解释.主机名匹配的规则要求* 不匹配任何带有点的内容,因此*.s3.amazonaws.com匹配example-bucket.s3.amazonaws.com(主机名组件中没有与之对齐的点*),但它不匹配,example.com.s3.amazonaws.com因为*不匹配example.com因为它包含一个点.这些规则由浏览器强加,这不是S3的限制.
现在,如果你要使用https://example.com访问你的水桶,S3不会单独实现这一目标,因为example.com本身并不是甚至远程类似S3上的SSL证书,这是主机名*.s3.amazonaws.com.您不仅需要从已签署用于"example.com"的证书颁发机构购买SSL证书,还需要将其安装在Web服务器上......在本例中为S3. .和S3不支持这个.
但是,Amazon CloudFront可以.您可以将CloudFront分配配置为存储桶的前端,并在CloudFront上安装您自己的SSL证书,通过HTTPS以这种方式访问存储桶.在此配置中,您的存储桶名称无关紧要 - 它甚至不必与您的域名匹配,因为您可以将CloudFront配置为使用您想要的任何存储桶.浏览器通过CloudFront获取内容,而CloudFront又从存储桶中提取内容.
现在......假设这不是您要求的...假设您不希望自己的域在使用亚马逊证书的SSL中工作...您可以配置带有虚线名称的存储桶,允许您创建用于托管"example.com"内容的CNAME ...仍然可以使用HTTPS访问存储桶.但是,由于上面解释的原因,您无法使用 CNAME 通过SSL访问它...因为您的主机名与S3的SSL证书上的主机名不匹配.
但是,如果要通过SSL访问名称中包含点的存储桶,则可以使用配置存储桶的区域端点执行此操作.
us-west-2区域中的"example.com"存储桶将通过将存储桶名称放在第一部分来解决,如果路径改为主机名的开头...就像这样:
https://s3-us-west-2.amazonaws.com/example.com/path/to/file.jpg
Run Code Online (Sandbox Code Playgroud)
每个S3区域至少有一个以这种方式工作的区域端点.对于"美国标准"地区,端点是"s3.amazonaws.com",它在地理上路由到弗吉尼亚州的主要站点或俄勒冈州的镜像站点,"s3-external-1.amazonaws.com"仅路由到弗吉尼亚州,或"s3-external-2.amazonaws.com",这在很大程度上没有记载,但在俄勒冈州的镜子路线.
因此,可以通过HTTPS访问名称中包含点的存储桶中的资源,但是您必须知道存储区的区域...尽管您通常不能简单地访问它https://your-cname.example.com,因为SSL的工作方式.
目前看来仅使用 S3 无法做到这一点,但使用 CloudFront 是可能的,因为它支持自定义证书。
CloudFront 并不是很贵,在某些情况下甚至可以比 S3 便宜。使用SNI时,它免费支持自定义证书(但是 < IE7、< Chrome6、< Firefox 2.0 等旧版浏览器不支持它)
https://files.mydomain.com我将以您想要用来指向名为的 S3 存储桶mydomain-files(存储桶名称无关紧要并且可以包含点)为例。
根据“Michael - sqlbot” anwser,需要使用自定义证书。我最初的假设是,使用 CNAME 将允许在使用我的自定义域时使用 Amazon S3 通配符证书,但这是错误的:自定义证书是绝对必需的,并且只能使用 CloudFront 设置,而不是 S3。
您可以使用任何您想要的证书提供商,但在这里我采用StartSSL (StartCom),它提供免费的 SSL 证书(但仅限于一个子域和 1 年)。
mydomain.comfiles.mydomain.comopenssl rsa -in files.key -out files.keycat sub.class1.server.ca.pem ca.pem >> chain.crt/cloudfront/aws iam upload-server-certificate --server-certificate-name CUSTOM_CERTIFICATE_NAME --certificate-body file://files.crt --private-key file://files.key --certificate-chain file://chain.crt --path /cloudfront/CUSTOM_PATH/files.mydomain.com CUSTOM_CERTIFICATE_NAME您在上传时选择)https://xyzxyzxyz.cloudfront.net/filemydomain.comDNS 配置files IN CNAME xyzxyzxyz.cloudfront.net您现在应该能够使用https://files.mydomain.com/file. 该证书将是您生成的自定义证书,files.mydomain.com因此一切都会正常工作。
| 归档时间: |
|
| 查看次数: |
3532 次 |
| 最近记录: |