【问题标题】:How to solve "NSS error -12276 (SSL_ERROR_BAD_CERT_DOMAIN)"如何解决“NSS 错误 -12276 (SSL_ERROR_BAD_CERT_DOMAIN)”
【发布时间】:2021-02-22 22:08:48
【问题描述】:

我只找到了one S.O. Post on the error "NSS error -12276 (SSL_ERROR_BAD_CERT_DOMAIN)。”

我在 CentOS 服务器上的 localhost 上运行一个简单的 python 应用程序。 Python 应用程序只是一个小助手客户端,当 ManageIQ(此设备上运行的主应用程序)发出请求时,它会向外部 API 发出 http 请求。

python 应用程序突然停止接受请求。 ManageIQ 记录以下错误:

Errno::ECONNREFUSED: Failed to open TCP connection to localhost:8080 (Connection refused - connect(2) for "localhost" port 8080)

为了调试它,我在命令行上运行了 curl 命令: curl --verbose http://localhost/flavors/Linux?name=Basic_A1

输出是:

* About to connect() to localhost port 80 (#0)
*   Trying ::1...
* Connected to localhost (::1) port 80 (#0)
> GET /flavors/Linux?name=Basic_A1 HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost
> Accept: */*
>
< HTTP/1.1 302 Found
< Date: Wed, 11 Nov 2020 16:17:57 GMT
< Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips mod_auth_gssapi/1.5.1 mod_auth_kerb/5.4
< Location: https://localhost/flavors/Linux?name=Basic_A1
< Content-Length: 229
< Content-Type: text/html; charset=iso-8859-1
<
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://localhost/flavors/Linux?name=Basic_A1">here</a>.</p>
</body></html>
* Connection #0 to host localhost left intact

这提示我需要 https,所以我尝试了curl --verbose https://localhost/flavors/Linux?name=Basic_A1

* About to connect() to localhost port 443 (#0)
*   Trying ::1...
* Connected to localhost (::1) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* Server certificate:
*       subject: E=mike.butak@expeditors.com,CN=miq-dev.chq.ei,OU=IS-Systems Administration,O=Expeditors,C=US
*       start date: Aug 24 22:20:01 2020 GMT
*       expire date: May 11 22:20:01 2040 GMT
*       common name: miq-dev.chq.ei
*       issuer: CN=Expeditors Server CA,OU=IS Security,O=Expeditors,C=US
* NSS error -12276 (SSL_ERROR_BAD_CERT_DOMAIN)
* Unable to communicate securely with peer: requested domain name does not match the server's certificate.
* Closing connection 0
curl: (51) Unable to communicate securely with peer: requested domain name does not match the server's certificate.

一天中的大部分时间都在寻找修复方法。过去我也遇到过这种情况,可以通过在/etc/pki/ca-trust/source/anchors 文件夹中重新安装我们的公司根证书,然后按照this post on serverfault 运行update-ca-trust enable 和update-ca-trust extract 来轻松解决。但是今天由于某种原因它不起作用。

有什么建议吗?谢谢!

【问题讨论】:

    标签: ssl tcp centos ssl-certificate


    【解决方案1】:

    ....请求的域名与服务器的证书不匹配

    此错误表示您已在 URL 上请求 localhost 作为域名,但未为 localhost 颁发证书。这与根 CA 无关,因此对更新这些没有帮助。相反,您用于访问网站的名称与证书中的名称不匹配 - 因此您需要调整其中之一。

    Errno::ECONNREFUSED: 无法打开到 localhost:8080 的 TCP 连接(连接被拒绝 - “localhost”端口 8080 的连接(2))

    这是一个完全不同的错误,与您使用 curl 遇到的错误完全无关。使用 curl 您尝试访问 localhost 端口 443 并在证书中获得名称不匹配。使用 Python,您尝试访问 localhost 端口 8080 并收到连接错误,因为该端口上没有服务器。

    【讨论】:

    • 非常感谢@Steffen Ulrich!我最初确实尝试过 curl http,但输出(请参阅上面发布的更新)建议(对我而言)服务器改为在 https 上提供服务。当我尝试这样做时,它给出了错误的证书错误。我很欣赏这些错误完全不相关的观点。但是,当您说端口 8080 上没有服务器时,我不明白您的意思。它一直在端口 8080 上工作,而我从未更改过服务器。
    • 服务器也在 http 端口 8080 上明确提供服务:`app.run(host='0.0.0.0', port=8080, use_reloader=False)`
    • @mike_butak:我只能说,错误清楚地表明连接在尝试连接到 localhost 端口 8080 时被拒绝。这不是 SSL 错误,而是TCP 级别错误。这可能意味着几件事:您已在此端口上配置了服务器,但它实际上并未运行,服务器在不同的机器、虚拟机或容器上运行,但您仍在尝试在 localhost 上错误地访问它 - 或者可能是其他东西.不幸的是,对您的实际设置知之甚少。
    • 感谢@Steffen Ulrich。通过检查服务器的脚本,我认为它无法启动而没有发出任何错误。我会把我的努力转向那个方向。您的意见很有帮助,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 2021-12-29
    • 2018-06-30
    • 2012-02-18
    • 2011-08-30
    • 2014-06-13
    • 2011-07-06
    相关资源
    最近更新 更多