+86 13541016684Mon. - Fri. 10:00-22:00

AWS coudfront中使用自己的SSL证书

AWS coudfront中使用自己的SSL证书

AWS coudfront中使用自己的SSL证书

在coudfront中使用自己的SSL证书

使用cloudfront的时候你可以选择使用cloudfront服务提供给你的ssl证书来实现https访问你的资源,但这样也仅限用https://xxxx.cloudfront.net/xx.jpg这样的形式。
如果你将你的子域名CNAME到这个cloudfront域名上之后,你再通过https://your-domain-name/xx.jpg,浏览器会提示网页资源不安全,这时候就得使用你自己域名的SSL证书。

    第一步,上传你的cf证书

如果用web console的话,如果你是IAM用户,你可能找不到上传cf证书的位置,切换成root账户,点开右上角的下拉菜单中的Security Credential,你就会看到上传cf证书的位置,此处还有x.509证书的位置
上传的时候,直接选择你的public key,但是我试了几遍都报错说无法上传,证书无效。放弃。用命令行上传。
我用的命令如下:

aws iam upload-server-certificate \
    --server-certificate-name awsgood.com \
    --certificate-body file://awsgood.com.pem \
    --private-key file://awsgood.com.key \
    --certificate-chain file://awsgood.com.chains.pem \
    --path /cloudfront/

报错了

A client error (MalformedCertificate) occurred when calling the 
UploadServerCertificate operation: Unable to validate certificate 
chain. The certificate chain must start with the immediate signing 
certificate, followed by any intermediaries in order. 
The index within the chain of the invalid certificate is: 2

考虑到这三个key文件在上传ELB的SSL证书的时候是可用的,又考虑到ELB出的certificate chain是可选项,推断这里也是可选项,于是就去掉

aws iam upload-server-certificate \
    --server-certificate-name awsgood.com \
    --certificate-body file://awsgood.com.pem \
    --private-key file://awsgood.com.key \
    --path /cloudfront/
    第二步,在CF distribution中修改设置

在SSL Certificate那里选择 Custom SSL Certificate(stored in AWS IAM),然后从后面的下拉菜单中选择就好,选择使用自定义证书之后,会让从两种Custom SSL Client Support中选择
All Clients,这个选项支持所有客户端,包括不支持Server Name Indication(SNI)的旧客户端,这个是收费的,不过也不太贵,几百刀每月的数量级,并且需要在线填写申请表。他会为cf边缘节点分配专用IP。

“专用 IP 自定义 SSL 分配专用 IP 地址来服务于每个 CloudFront 节点处的 SSL 内容。因为 IP 地址与 SSL 证书之间是一对一映射,所以专用 IP 自定义 SSL 使用的是不支持 SNI 的浏览器和其他客户端。由于当前的 IP 地址成本,专用 IP 自定义 SSL 的费用是每月 600 USD,按比例分配到每个小时。”

Only Clients that support SNI,这个就不支持比较老的客户端了,具体的见文章后面的FAQ。为了省点预算,我选的这种。
完成配置之后,大概等了那么3分钟左右就生效了。

FAQs:
问:什么是服务器名称指示SNI?
服务器名称指示 (SNI) 是传输层安全性 (TLS) 协议的延伸。该机制识别相关 SSL 请求相关的域(服务器名称)以便在 SSL 握手时使用适当的证书。这允许单个 IP 地址用于多个服务器。SNI 要求浏览器支持添加服务器名称,尽管大部分现代浏览器支持,但是还有一些老式浏览器不能支持。

问:哪些浏览器支持SNI?
SNI 自定义 SSL 可使用大部分现代浏览器,包括 Chrome V 6 和更高版本(运行于 Windows XP 和更高版本或 OS X 10.5.7 和更高版本上之上)、Safari V 3 和更高版本(运行于 Windows Vista 和更高版本或 Mac OS X 10.5.6. 和更高版本之上)、Firefox 2.0 和更高版本,以及 Internet Explorer 7 和更高版本(运行于 Windows Vista 和更高版本之上)。