许多客户将使用私有证书来保护不面向公众且不需要公共证书的应用程序传输中的数据。例如公司可能有一个用于向员工传达公告和资源的公司内联网页面,或者一个允许员工查看其工资单的应用程序。这些应用程序永远不应该由组织外部的用户使用,因此不需要公共证书。
本节我们将设置简单的内部 Web 应用程序、配置证书并将其附加到ELB,以在内部 Web 浏览器和应用程序之间启用安全的 TLS 连接。
我们先创建一个lambda,做为ELB的后端服务。进行lambda页面,创建一个lambda,命名为pca-lambda
, 选python环境,点击创建:
创建完成后,更新lambda的代码:
import json
def lambda_handler(event, context):
# TODO implement
return {
"statusCode": 200,
"statusDescription": "200 OK",
"isBase64Encoded": False,
"headers": {
"Content-Type": "text/html"
},
"body": "<h1>Hello from Lambda!</h1>"
}
点击部署:
进入ELB页面,创建一个ELB:
选择ALB类型:
由于我们要在浏览器访问,这里选择internet-facing
(假装我们在内网环境)。直接使用默认的vpc和子网:
创建一个新的target group:
选择lambda类型,将target-group命名为pca-test-target-group
:
选择上面创建出来的lambda:
创建target group完成后,回到创建ELB的页面,刷新,使用这个target group:
点击创建ELB,创建完成后,复制出来它的DNS,用于下面的步骤:
然后为这个ELB的安全组放开80和443端口对0.0.0.0/0
的访问,这样我们在浏览器中可以访问它。
到 AWS Certificate Manager (ACM) 控制台并单击请求证书:
选择请求私有证书,因为我们正在构建一个使用私有证书建立 TLS 连接的内部应用程序:
在请求私有证书页面上,从下拉菜单中选择适当的 CA。根CA不应该用来直接颁发证书,因此我们要选择我们在上一节中创建的从属CA。在FQDN
部分,输入ELB的DNS 名称:
了解 ACM 需要权限才能正确续订从此私有证书颁发机构颁发的证书(上一节我们配置了从属CA允许 ACM自动续订该 CA 的私有证书):
最后点击Request
。
刷新页面,证书状态应在几分钟(或几秒钟)更改为Issued:
在ELB页面,添加Listener:
选择协议HTTPS:端口应更改为 443;选择转发到pca-target-group
:
对于Default SSL/TLS server certificate部分:选择我们之前颁发的证书。该证书配置了这个ALB的DNS地址:
最后点击添加,完成后的效果:
我们先用浏览器访问ELB的80端口,由于不需要验证证书,所以直接可以访问成功:
现在我们测试443端口访问,我们需要验证 TLS 连接是否已成功建立,并验证我们的浏览器是否信任该证书。
由于 Web 浏览器的信任存储中没有根证书,ALB 身份验证将失败:
在 AWS Private CA 控制台中,选择创建的根 CA。单击Export certificate body to a file
, 这样certificate.pem
文件将保存在本地电脑上:
将根证书加载到浏览器的信任存储中。打开 Chrome 的设置, 搜索certificate,在Privacy and security
,单击Manage certificate:
将certificate.pem
文件拖到Certificates
中:
双击证书。选择Always trust
:
再次访问浏览器,这次可以成功访问,在浏览器的地址栏上看到绿色的锁图标。这表明 ALB 域的身份已经过验证,并且该证书受到浏览器的信任:
本节ALB 出于测试目的而创建成internet-facing
。但是在生产中,相同的步骤和理论也适用。