从AWS申请免费的SSL证书并对DKIM排错
今天来给大家介绍一下使用AWS的免费工具申请SSL证书,以下各部分将讨论如何使用 AWS Certificate Manager (ACM)控制台来请求公有 ACM 证书。
请求公有证书
登录 AWS 管理控制台,并通过以下网址打开 ACM 控制台:https://console.aws.amazon.com/acm/home。
在下图可以看出分为预置证书和私有证书两种,个人用户选用预制证书就可以,私有颁发机构为运营类型,所以个人用户基本不用这类。
在下面在 申请证书 页面上,键入您的域名。您可以使用完全限定域名 (FQDN)(例如 Example Domain),或者顶级域名(例如 Example Domain)。您还可以在最左侧位置使用星号 (*) 作为通配符来保护同一域中的多个站点名称。
必须先确认您拥有或可以控制请求中指定的所有域名,然后 Amazon 证书颁发机构 (CA) 才能为网站颁发证书。请求证书时,您可以选择电子邮件验证或 DNS 验证。
从DNS验证
下面我们主要讨论使用 DNS 验证。
选择 DNS验证。选择 审核在 验证 页面上,展开域名信息或选择 下载的验证文件。如果展开域信息,ACM 会显示您必须添加到 DNS 数据库中的 CNAME 记录的名称和值以验证您是否控制该域。
记录包含两部分:名称和标签。ACM 生成的 CNAME 的名称部分是由一个下划线字符 (_),后跟一个令牌(这是绑定到您的 AWS 账户和域名的唯一字符串)构建的。ACM 在您的域名前加上下划线和令牌来构建名称部分。ACM 通过一个下划线字符,其后跟一个不同的令牌来构建标签,此令牌也与您的 AWS 账户和域名绑定。ACM 在下划线和令牌后加上 AWS 用于验证的 DNS 域名:AWS Certificate Manager - Amazon Web Services (AWS)。以下示例显示了 Example Domain、subdomain.example.com 和 *.example.com 的 CNAME 格式。
添加包含域名 的 CNAME 记录可能会导致域名重复。要避免重复,您可以仅手动复制所需的 CNAME 部分。其格式为 _3639ac514e785e898d2646601fa951d5(下面我们会详细解释)。更新 DNS 配置后,选择继续。ACM 会显示一个表格视图,其中包含您的所有证书。它显示了您请求的证书及其状态。在 DNS 提供商传播您的记录更新后,ACM 最多需要几个小时来验证域名并颁发证书。在此期间,ACM 显示验证状态为等待验证。验证域名后,ACM 将验证状态更改为成功。AWS 颁发证书后,ACM 将证书状态更改为已颁发。
最后就可以成功地申请到自己的免费证书了
由于验证时间一般需要1-24小时不等,所以下面就不进行展示了
如何正确设置DKIM
什么是DKIM,DKIM代表DomainKeys Identified Email。它提供了一种方法来验证发送电子邮件的组织是否有权这样做。DKIM需要在DNS区域中添加公钥。关键是通常由发送您的电子邮件,例如组织提供给您SendGrid,邮戳。密钥将作为TXT记录直接插入您的区域,或者它将是指向提供商DNS中密钥的CNAME。我在做这篇Blog时发现一个问题,就是关于在DNS中加入CNAME时,有些DNS提供商不能够使用下划线开头,提示主机名类型不符。
SES创建的记录是CNAME而不是TXT记录,因此SES可以托管签名密钥。通过托管签名密钥,SES可以自动轮换签名凭据并降低任何密钥泄漏的风险。
某些DNS提供商不支持添加包含下划线的CNAME记录,尽管RFC特别允许这样做。但是,DKIM规范要求记录名称中的下划线,因此删除下划线不是一种选择。下划线是记录名称中唯一不受SES或其客户控制的部分。
虽然在Internet标准中不允许在dnsNames中使用下划线字符,但在TLS / SSL证书的SAN字段中使用时,也一直被视为灰色区域。如果在咱们的DNS商中发生此类事件的话,可以使用以下的方法进行解决:
第一种 解决方案可以更改DNS提供商。Amazon Web Services提供名为Amazon Route 53的可扩展域名服务,该服务遵循RFC强加的标准并允许SES生成的CNAME记录。使用SES与Route 53集成。如果您在Route 53上使用与SES相同的AWS账户设置域名,则可以通过一键式过程设置域验证和DKIM。
第二种 方法是使用子域(例如我们的例子中的sales.ses-example.com)进行电子邮件发送,并将其委托给DNS提供商,例如Amazon Route 53,它正确地允许CNAME记录中的下划线。然后,您可以使用与在主域上执行的相同步骤在子域上执行域验证和DKIM验证过程。电子邮件将被DKIM签名,但"发件人"地址将包含子域(在我们的例子中,"发件人"地址将是<any-local-part> @ sales.ses-example.com)。
第三种 选择使用自己进行签名。这将使您完全控制密钥和签名过程,但实现和维护需要更多的工作。
最后,您可以找DNS提供商,让他们在RFC允许的CNAME记录中正确支持添加对下划线。
对于我们的域名,我们假设我们的DNS提供商已经启用了对CNAME记录中下划线的支持,现在我们可以安全地添加DKIM文档中指定的所需DNS条目。通过此步骤,我们现在等待SES向我们发送确认电子邮件,并在SES控制台中将域的DKIM验证状态从Pending更改为已验证,这将确认CNAME记录是否存在。