And*_*zlo 7 load-balancing ssl-certificate google-compute-engine google-cloud-platform
我正在将 example.com 从外部(非 Google)托管提供商迁移到 GCP。
设置负载均衡器时,我注意到我必须将 example.com 指向负载均衡器才能验证 Google 托管证书。
我应该将 example.com 的 A 记录更改为新负载均衡器的(静态)IP - 然后它将验证。
问题是,我已经有大量流向 example.com 的流量,在 example.com 开始指向负载均衡器之后、但在验证证书之前发生的请求将生成 SSL 错误,并使用户非常不满意。
有人解决这个问题了吗?我知道有一些方法可以避免轮换证书时出现停机,但是一定有某种方法可以在不停机的情况下迁移大型站点吗?
其他答案都非常好,但我非常有动力找到一种迁移到 GCP 负载均衡器的方法,而无需计划停机,我们基本上只是坐等证书颁发。添加我自己的答案,因为这个问题的流量很大,而且事实证明,通过一些规划和测试,停机是不必要的。
我是这样做的:
ACTIVE
. 这可能需要很长时间。如果没有自我管理证书,就会出现停机。总结一下这个问题:Google 的托管证书需要指向已分配证书的负载均衡器的 DNS 记录,否则不会颁发证书。这会产生一个问题,因为颁发证书最多可能需要一个小时,而我们不希望在此期间出现 SSL 错误。
我发现的解决方法是在迁移过程中使用自我管理的证书,并在我们的域指向 GCP 负载均衡器并且证书已经颁发后切换到 Google 管理的证书。
我使用了Let's Encrypt证书,但其他证书也可以工作。这样做的好处是我们已经在使用 Let's Encrypt 证书,所以我不必担心证书兼容性。
这是我所做的简化版本。负载均衡器的目标代理将称为my-target-proxy
,证书称为lb-certificate-letsencrypt
和lb-certificate-managed
。域名是example.com
和subdomain.example.com
。
先决条件:
生成一个新证书用作自我管理证书,由 Let's Encrypt 签名:
openssl genrsa -out letsencrypt.pem 2048
Run Code Online (Sandbox Code Playgroud)
创建 openssl 配置文件:
openssl.conf
[req]
default_bits = 2048
req_extensions = extension_requirements
distinguished_name = dn_requirements
[extension_requirements]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @sans_list
[dn_requirements]
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name (full name)
localityName = Locality Name (eg, city)
0.organizationName = Organization Name (eg, company)
organizationalUnitName = Organizational Unit Name (eg, section)
commonName = Common Name (e.g. server FQDN or YOUR name)
emailAddress = Email Address
[sans_list]
DNS.1 = example.com
DNS.2 = subdomain.example.com
Run Code Online (Sandbox Code Playgroud)
生成证书签名请求:
openssl req -new -key letsencrypt.pem -out letsencrypt.csr -config openssl.conf
Run Code Online (Sandbox Code Playgroud)
从 Let's Encrypt 获取签名证书:
certbot certonly --csr letsencrypt.csr --manual --preferred-challenges dns
Run Code Online (Sandbox Code Playgroud)
更新 certbot 指示的 DNS 记录以验证所有权。其他挑战也可能有效,但 DNS 似乎是最简单的。
记下哪个文件是完整的证书链,并0003_chain.pem
在必要时在示例中进行替换:
完整的证书链保存在:...
在 GCP 中上传并创建自我管理证书:
gcloud compute ssl-certificates create lb-certificate-letsencrypt \
--certificate=0003_chain.pem \
--private-key=letsencrypt.pem \
--global
Run Code Online (Sandbox Code Playgroud)
创建您要迁移到的负载均衡器,或将其配置为使用自我管理证书:
gcloud beta compute target-https-proxies create my-target-proxy \
--ssl-certificates=lb-certificate-letsencrypt [url-map and other options]
# Or
gcloud beta compute target-https-proxies update my-target-proxy \
--ssl-certificates=lb-certificate-letsencrypt
Run Code Online (Sandbox Code Playgroud)
更新 DNS 记录以指向负载均衡器的 IP。现在应该能够终止 example.com 和 subdomain.example.com 的 TLS。您可以通过在主机文件中添加 example.com 的记录来测试此步骤,该记录指向负载均衡器 IP。约翰·汉利(John Hanley)的回答对此提供了很多好的建议。
创建托管证书:
gcloud compute ssl-certificates create lb-certificate-managed \
--domains=example.com,subdomain.example.com \
--global
Run Code Online (Sandbox Code Playgroud)
Google 管理的证书不支持通配符,因此请务必列出所有正在使用的域名。
将其与自我管理证书一起分配给目标代理。在将证书分配给代理之前,不会配置证书:
gcloud beta compute target-https-proxies update my-target-proxy \
--ssl-certificates=lb-certificate-letsencrypt,lb-certificate-managed
Run Code Online (Sandbox Code Playgroud)
检查状态:
gcloud compute ssl-certificates describe lb-certificate-managed
Run Code Online (Sandbox Code Playgroud)
等到从status
更改为PROVISIONING
-ACTIVE
任何其他状态都是错误,应进行调查。“配置 Google 管理的证书最多可能需要 60 分钟。” 根据文档(让我们加密在几秒钟内完成同样的事情......)。
负载均衡器可能还需要 30 分钟才能使用。
因此,请在状态变为 后等待 30 分钟ACTIVE
。
更新目标代理以仅使用 Google 管理的证书:
gcloud beta compute target-https-proxies update my-target-proxy \
--ssl-certificates=lb-certificate-managed
Run Code Online (Sandbox Code Playgroud)
新设置可能需要一段时间才能传播。在浏览器中或使用 openssl 验证端点的颁发者:
openssl s_client -connect example.com:443 -showcerts \
-CAfile /etc/ssl/certs/ca-certificates.crt <<< Q
Run Code Online (Sandbox Code Playgroud)
发行人现在应该是“Google Trust Services LLC”,而不是“Let's Encrypt”。
现在可以删除自我管理的 Let's Encrypt 证书,或保留该证书直至其过期,以防托管证书出现任何问题。
要清理未使用的自管理 Let's Encrypt 证书,请运行:
gcloud compute ssl-certificates delete lb-certificate-letsencrypt
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2902 次 |
最近记录: |