Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ubuntu 如何确定哪个Linux TLS证书允许我访问给定的主机?_Ubuntu_Ssl_Encryption_Proxy - Fatal编程技术网

Ubuntu 如何确定哪个Linux TLS证书允许我访问给定的主机?

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证书肯定有一种行之有

我们在公司的MITM代理后面有两台Ubuntu Linux机器,用于重新加密HTTPS流量。为了传递这个代理,我们需要将定制的TLS证书添加到Ubuntu的
/etc/ssl/cert/ca certificates.crt
文件中

现在,我们的一台机器设置正确,因此它可以访问主机A。另一台机器无法访问,可能是因为缺少正确的证书。我们想知道哪些证书是“正确的”,并将它们添加到另一台机器上

成功会话的跟踪如下所示(某些名称和IP已更改):


最简单的方法:找到并下载MITM代理的CA证书肯定有一种行之有效的方法,而且肯定有文档记录。您不需要从另一台机器的系统池中查找正确的CA

这就是说,如果您真的必须知道如何仅使用到随机网站的连接来查找正确的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证书,请继续阅读


    这可以通过两个步骤完成:

  • 查找服务器返回的链中最顶端证书的颁发者的可分辨名称
  • 查找其使用者可分辨名称与刚找到的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...