Ubuntu 如何确定哪个Linux TLS证书允许我访问给定的主机?
我们在公司的MITM代理后面有两台Ubuntu Linux机器,用于重新加密HTTPS流量。为了传递这个代理,我们需要将定制的TLS证书添加到Ubuntu的Ubuntu 如何确定哪个Linux TLS证书允许我访问给定的主机?,ubuntu,ssl,encryption,proxy,Ubuntu,Ssl,Encryption,Proxy,我们在公司的MITM代理后面有两台Ubuntu Linux机器,用于重新加密HTTPS流量。为了传递这个代理,我们需要将定制的TLS证书添加到Ubuntu的/etc/ssl/cert/ca certificates.crt文件中 现在,我们的一台机器设置正确,因此它可以访问主机A。另一台机器无法访问,可能是因为缺少正确的证书。我们想知道哪些证书是“正确的”,并将它们添加到另一台机器上 成功会话的跟踪如下所示(某些名称和IP已更改): 最简单的方法:找到并下载MITM代理的CA证书肯定有一种行之有
/etc/ssl/cert/ca certificates.crt
文件中
现在,我们的一台机器设置正确,因此它可以访问主机A。另一台机器无法访问,可能是因为缺少正确的证书。我们想知道哪些证书是“正确的”,并将它们添加到另一台机器上
成功会话的跟踪如下所示(某些名称和IP已更改):
最简单的方法:找到并下载MITM代理的CA证书肯定有一种行之有效的方法,而且肯定有文档记录。您不需要从另一台机器的系统池中查找正确的CA 这就是说,如果您真的必须知道如何仅使用到随机网站的连接来查找正确的CA证书,请继续阅读
这可以通过两个步骤完成:
查找发行人的专有名称: 要查找颁发者的名称,请向几乎所有主机发出请求。提供的服务器证书将是来自您的MITM代理的证书,而不是真实的证书,但过程完全相同 让我们以
www.google.com
为例:注意,我故意告诉openssl
不要使用系统CA池,实际上不信任任何东西。运行它时,不需要-no CApath
参数
$ openssl s_client -no-CApath -connect www.google.com:443
CONNECTED(00000003)
depth=1 C = US, O = Google Trust Services, CN = GTS CA 1O1
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google LLC, CN = www.google.com
verify return:1
---
Certificate chain
0 s:C = US, ST = California, L = Mountain View, O = Google LLC, CN = www.google.com
i:C = US, O = Google Trust Services, CN = GTS CA 1O1
1 s:C = US, O = Google Trust Services, CN = GTS CA 1O1
i:OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
---
etc.....
服务器返回了两个证书:具有CN=www.google.com
的服务器证书及其属于google Trust Services
的颁发者(中间CA)。中间CA是由GlobalSign Root CA-R2
颁发的,这就是我们需要找到的证书
查找匹配的CA证书: 我现在需要找到具有匹配的可分辨名称的CA证书:
OU=GlobalSign Root CA-R2,O=GlobalSign,CN=GlobalSign
要解码系统池中的证书,我可以再次使用openssl
。让我们只检查一个证书(如果文件名对您没有帮助,您可能需要检查多个证书。一个小脚本就可以做到这一点):
此证书具有受试者可分辨名称:
OU=GlobalSign根CA-R2,O=GlobalSign,CN=GlobalSign
这与发行人的可分辨名称完全匹配。它可能是正确的证书(可能有多个同名证书,通常在证书更新时)
注意:在您的示例中,返回一个证书(而不是服务器证书和一些中间CA)。同样适用:您将需要找到主题名称为:
CN=HWIT Enterprise CA 1
(假设打印了完整名称)的CA证书
如前所述,可能有多个CA具有匹配的可分辨名称。最简单的方法是将它们全部添加到CA证书目录。在某些情况下(并非总是如此,因为这不是必需的),证书还具有一个
授权密钥标识符
,该标识符可以与可能的CA的主题密钥标识符
相匹配,这是一种最简单的方法:肯定有一种行之有效的方法来查找和下载MITM代理的CA证书,这肯定是有记载的。您不需要从另一台机器的系统池中查找正确的CA
这就是说,如果您真的必须知道如何仅使用到随机网站的连接来查找正确的CA证书,请继续阅读
这可以通过两个步骤完成:
查找发行人的专有名称: 要查找颁发者的名称,请向几乎所有主机发出请求。提供的服务器证书将是来自您的MITM代理的证书,而不是真实的证书,但过程完全相同 让我们以
www.google.com
为例:注意,我故意告诉openssl
不要使用系统CA池,实际上不信任任何东西。运行它时,不需要-no CApath
参数
$ openssl s_client -no-CApath -connect www.google.com:443
CONNECTED(00000003)
depth=1 C = US, O = Google Trust Services, CN = GTS CA 1O1
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google LLC, CN = www.google.com
verify return:1
---
Certificate chain
0 s:C = US, ST = California, L = Mountain View, O = Google LLC, CN = www.google.com
i:C = US, O = Google Trust Services, CN = GTS CA 1O1
1 s:C = US, O = Google Trust Services, CN = GTS CA 1O1
i:OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
---
etc.....
服务器返回了两个证书:具有CN=www.google.com
的服务器证书及其属于google Trust Services
的颁发者(中间CA)。中间CA是由GlobalSign Root CA-R2
颁发的,这就是我们需要找到的证书
查找匹配的CA证书: 我现在需要找到具有匹配的可分辨名称的CA证书:
OU=GlobalSign Root CA-R2,O=GlobalSign,CN=GlobalSign
要解码系统池中的证书,我可以再次使用openssl
。让我们只检查一个证书(如果文件名对您没有帮助,您可能需要检查多个证书。一个小脚本就可以做到这一点):
此证书具有受试者可分辨名称:
OU=GlobalSign根CA-R2,O=GlobalSign,CN=GlobalSign
这与发行人的可分辨名称完全匹配。它可能是正确的证书(可能有多个具有相同名称的证书,通常在证书
$ openssl s_client -no-CApath -connect www.google.com:443
CONNECTED(00000003)
depth=1 C = US, O = Google Trust Services, CN = GTS CA 1O1
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google LLC, CN = www.google.com
verify return:1
---
Certificate chain
0 s:C = US, ST = California, L = Mountain View, O = Google LLC, CN = www.google.com
i:C = US, O = Google Trust Services, CN = GTS CA 1O1
1 s:C = US, O = Google Trust Services, CN = GTS CA 1O1
i:OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
---
etc.....
$ openssl x509 -text -in /usr/share/ca-certificates/mozilla/GlobalSign_Root_CA_-_R2.crt
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
04:00:00:00:00:01:0f:86:26:e6:0d
Signature Algorithm: sha1WithRSAEncryption
Issuer: OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
Validity
Not Before: Dec 15 08:00:00 2006 GMT
Not After : Dec 15 08:00:00 2021 GMT
Subject: OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
etc...