有没有办法让Azure应用程序网关返回链中的所有证书?

问题描述 投票:0回答:0

我们正在将 Web 应用程序从 AWS 迁移到 Azure。一些用户通过运行 Android 6 的嵌入式平板电脑上的应用程序访问该网站。我使用 certbot 从 LetsEncrypt 获取证书,并在更新挂钩内将证书转换为 pfx 并更新应用程序网关:

openssl pkcs12 -inkey $RENEWED_LINEAGE/privkey.pem -in $RENEWED_LINEAGE/cert.pem -certfile $RENEWED_LINEAGE/chain.pem -export -out $RENEWED_LINEAGE/cert.pfx -passout pass:$PASSWORD az 网络应用程序网关 ssl-cert update -g $RGNAME --gateway-name $AGNAME -n $DOMAIN --cert-file $RENEWED_LINEAGE/cert.pfx --cert-password $PASSWORD

如果我检查它,我可以看到它包含三个证书:

openssl pkcs12 -in $RENEWED_LINEAGE/cert.pfx -passin 通行证:$PASSWORD -passout 通行证:$PASSWORD

subject=CN = new.(redacted).com
发行人=C = US,O = Let's Encrypt,CN = R3
...
主题=C = US,O = 让我们加密,CN = R3
发行人=C = US,O = 互联网安全研究小组,CN = ISRG Root X1
...
主题=C = US,O = 互联网安全研究小组,CN = ISRG Root X1
发行人=O = 数字签名信托公司,CN = DST 根 CA X3

但是,一旦将证书应用于应用程序网关,当我连接到它时,链似乎省略了 TrustID X3 根(DST 根 CA X3)证书:

openssl s_client -debug -connect new.(已编辑).com:443

证书链
0 s:CN = new.(redacted).com
i:C = US,O = 让我们加密,CN = R3
a:PKEY:rsa加密,2048(位);信号:RSA-SHA256
v:NotBefore: 7 月 28 日 (HH:mm:ss) 2023 GMT;稍后:10 月 26 日(时:分:秒)2023 GMT
1 s:C = US,O = 让我们加密,CN = R3
i:C = US,O = 互联网安全研究组,CN = ISRG Root X1
a:PKEY:rsa加密,2048(位);信号:RSA-SHA256
v:NotBefore: 2020 年 9 月 4 日 00:00:00 GMT;不之后:2025 年 9 月 15 日 16:00:00 GMT

这对于现代客户端来说效果很好 - Chrome 报告连接是安全的 - 但 Android 6 客户端会失败,并出现异常“javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:未找到证书路径的信任锚。”

我尝试专门下载 ISRG Root X1 证书(由 TrustID X3 Root (DST Root CA X3) 交叉签名)和自签名 TrustID X3 Root 证书,并将它们包含在 pfx 中:

curl -s -o $RENEWED_LINEAGE/isrgrootx1.pem“https://letsencrypt.org/certs/isrg-root-x1-cross-signed.pem”
卷曲-s -o $RENEWED_LINEAGE/trustidx3.pem“https://letsencrypt.org/certs/trustid-x3-root.pem.txt”
猫 $RENEWED_LINEAGE/chain.pem $RENEWED_LINEAGE/isrgrootx1.pem $RENEWED_LINEAGE/trustidx3.pem > $RENEWED_LINEAGE/certs.pem
openssl pkcs12 -inkey $RENEWED_LINEAGE/privkey.pem -in $RENEWED_LINEAGE/cert.pem -certfile $RENEWED_LINEAGE/certs.pem -export -out $RENEWED_LINEAGE/cert.pfx -passout pass:$PASSWORD

我可以确认 pfx 中有更多证书,但将其应用到应用程序网关后,返回的链中没有更多证书。 我还尝试在转换为 pfx 时使用 fullchain.pem 而不是 chain.pem,但这失败并出现重复证书错误。

我确信应用程序网关不返回链中的某些证书是问题所在,因为如果我连接到现有站点(在 AWS 中),它会返回包含四个证书的链,包括丢失的信任 ID X3 根:

openssl s_client -debug -connect old.(redacted).com:443

证书链
0 s:CN = 旧的.(已编辑).com
i:C = US,O = 让我们加密,CN = R3
a:PKEY:rsa加密,2048(位);信号:RSA-SHA256
v:NotBefore: 7 月 15 日 01:mm:ss 2023 GMT;不晚于:10 月 13 日 01:mm:ss 2023 GMT
1 s:CN = 旧的.(已编辑).com
i:C = US,O = 让我们加密,CN = R3
a:PKEY:rsa加密,2048(位);信号:RSA-SHA256
v:NotBefore: 7 月 15 日 01:mm:ss 2023 GMT;不晚于:10 月 13 日 01:mm:ss 2023 GMT
2 s:C = US,O = 让我们加密,CN = R3
i:C = US,O = 互联网安全研究组,CN = ISRG Root X1
a:PKEY:rsa加密,2048(位);信号:RSA-SHA256
v:NotBefore: 2020 年 9 月 4 日 00:00:00 GMT;不之后:2025 年 9 月 15 日 16:00:00 GMT
3 s:C = US,O = 互联网安全研究小组,CN = ISRG Root X1
i:O = 数字签名信托有限公司,CN = DST 根 CA X3
a:PKEY:rsa加密,4096(位);信号:RSA-SHA256
v:NotBefore: 2021 年 1 月 20 日 19:14:03 GMT;稍后:2024 年 9 月 30 日 18:14:03 GMT

Android 6 平板电脑在连接到现有站点时没有任何问题。第一个证书返回两次(主题 CN 和时间戳相同)这一事实让我认为有人专门摆弄了证书包,可能是为了解决这个问题。

ssl-certificate android-6.0-marshmallow azure-application-gateway
© www.soinside.com 2019 - 2024. All rights reserved.