【问题标题】:root ca not trusted - OCSP responder with nginx https serverroot ca 不受信任 - 带有 nginx https 服务器的 OCSP 响应程序
【发布时间】:2020-02-19 14:29:11
【问题描述】:

出于测试目的,我正在尝试设置一个 https 服务器,仅用于本地网络内的通信。必须使用 TLS 双向身份验证和 OCSP 装订(由于客户端的要求)。

对于 nginx,我有一个基本设置:

listen 44300 ssl default_server;
    listen [::]:44300 ssl default_server;
    ssl on;
    ssl_certificate /home/user/work/Telematics2/server/certificate.crt;
    ssl_certificate_key /home/user/work/Telematics2/server/certKey.key;
    ssl_protocols TLSv1.2 TLSv1.3;

    ssl_verify_client optional_no_ca;
    ssl_client_certificate /home/user/work/Telematics2/client/certificate.crt;

    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /home/user/work/Telematics2/server/concat.crt;

为了进行测试,我使用以下命令在本地机器上创建了服务器和客户端密钥:

openssl genrsa -out rootCA.key 1024

openssl req -new -x509 -days 3650 -key rootCA.key -out rootCA.crt -config validation.cnf -subj /C=DE/ST=BW/L=Earth/O=CompanyName/OU=IT/CN=X.X.X.X/emailAddress=email@example.com

openssl genrsa -out certKey.key 1024

openssl req -new -x509 -days 3650 -key certKey.key -out certificate.crt -config validation.cnf -subj /C=DE/ST=BW/L=Earth/O=CompanyName/OU=IT/CN=X.X.X.X/emailAddress=email@example.com

openssl x509 -x509toreq -in certificate.crt -out CSR.csr -signkey certKey.key

openssl ca -batch -startdate 150813080000Z -enddate 250813090000Z -keyfile rootCA.key -cert rootCA.crt -policy policy_anything -config validation.cnf -notext -out certificate.crt -infiles CSR.csr

openssl req -new -nodes -out ocspSigning.csr -keyout ocspSigning.key -subj /C=DE/ST=BW/L=Earth/O=CompanyName/OU=IT/CN=X.X.X.X/emailAddress=email@example.com

yes | openssl ca -keyfile rootCA.key -cert rootCA.crt -in ocspSigning.csr -out ocspSigning.crt -config validation.cnf

配置包含以下额外行:

[ usr_cert ]
authorityInfoAccess = OCSP;URI:http://X.X.X.X:8080
[ v3_OCSP ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = OCSPSigning

然后我用 openssl 启动了一个 OCSP 服务器:

openssl ocsp -index demoCA/index.txt -port 8080 -rsigner ocspSigning.crt -rkey ocspSigning.key -CA rootCA.crt -text

并尝试访问服务器上的一个简单的 html 文件:

curl -v -L -k --cert /home/user/work/Telematics2/client/certificate.crt --key /home/user/work/Telematics2/client/certKey.key https://X.X.X.X:44300/index.html --cert-status --cacert /home/user/work/Telematics2/server/rootCA.crt

这给了我以下输出:

*   Trying X.X.X.X...
* TCP_NODELAY set
* Connected to X.X.X.X (X.X.X.X) port 44300 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /home/user/work/Telematics2/server/rootCA.crt
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS Unknown, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Unknown (8):
* TLSv1.3 (IN), TLS Unknown, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Request CERT (13):
* TLSv1.3 (IN), TLS Unknown, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS Unknown, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS Unknown, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Client hello (1):
* TLSv1.3 (OUT), TLS Unknown, Certificate Status (22):
* TLSv1.3 (OUT), TLS handshake, Certificate (11):
* TLSv1.3 (OUT), TLS Unknown, Certificate Status (22):
* TLSv1.3 (OUT), TLS handshake, CERT verify (15):
* TLSv1.3 (OUT), TLS Unknown, Certificate Status (22):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
*  subject: C=DE; ST=BW; L=Earth; O=CompanyName; OU=IT; CN=X.X.X.X; emailAddress=email@example.com
*  start date: Aug 13 08:00:00 2015 GMT
*  expire date: Aug 13 09:00:00 2025 GMT
*  issuer: C=DE; ST=BW; L=Earth; O=CompanyName; OU=IT; CN=X.X.X.X; emailAddress=email@example.com
*  SSL certificate verify ok.
* No OCSP response received
* stopped the pause stream!
* Closing connection 0
* TLSv1.3 (OUT), TLS Unknown, Unknown (21):
* TLSv1.3 (OUT), TLS alert, Client hello (1):
curl: (91) No OCSP response received

和 nginx error.log 说:

2020/02/19 14:53:04 [error] 29340#29340: OCSP_basic_verify() failed (SSL: error:2706A067:OCSP routines:ocsp_check_delegated:missing ocspsigning usage error:27069070:OCSP routines:OCSP_basic_verify:root ca not trusted) while requesting certificate status, responder: X.X.X.X, peer: X.X.X.X:8080, certificate: "/home/user/work/Telematics2/server/certificate.crt"

但是上面启动的ocsp server实际打印的是:

OCSP Response Data:
    OCSP Response Status: successful (0x0)
    Response Type: Basic OCSP Response
    Version: 1 (0x0)
    Responder Id: C = DE, ST = BW, O = CompanyName, OU = IT, CN = X.X.X.X, emailAddress = email@example.com
    Produced At: Feb 19 14:17:18 2020 GMT
    Responses:
    Certificate ID:
      Hash Algorithm: sha1
      Issuer Name Hash: 3CFD1A620E876EB93992CA04B1903C354AC6C614
      Issuer Key Hash: 1E01DD83D567E3E111FD89E26B2636964C26AFDC
      Serial Number: 01
    Cert Status: good
    This Update: Feb 19 14:17:18 2020 GMT

我不是这个主题的专家,所以我真的不知道下一步该做什么。我觉得问题可能出在证书上,因为这是我最不确定的部分。我并不真正需要 OCSP 提供的安全性,但客户端需要此步骤才能成功进行身份验证,但如果可以的话,我可以信任任何 CA。

【问题讨论】:

    标签: ssl nginx openssl ocsp


    【解决方案1】:

    可能是因为您的 ocspserver 在 localhost 上运行。假设您尝试访问 https url 的服务器不在同一台机器上不确定。尝试做类似的事情。如果我错了,请告诉我。或者如果你有解决方案

    【讨论】:

      猜你喜欢
      • 2020-07-11
      • 2018-09-29
      • 2019-11-10
      • 2012-02-26
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 2015-06-26
      相关资源
      最近更新 更多