Ubuntu

無法獲得本地頒發者證書

  • February 7, 2019

我有一個對 *.example.com 有效的 SSL 證書。我已經能夠在 IIS 上為 subdomain.example.com 正確設置此 SSL 證書。

但是我在 ubuntu 16.04 伺服器和 nginx 上遇到了問題。

我使用 pfx 文件中的開放 SSL 創建了密鑰和證書文件。然後將範例站點添加到 nginx。這是我的 nginx 配置。

server {

listen 443 ssl;
server_name subdomain2.example.com subdomain2.example.com;
ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/cert.rsa;

root /subdomain2/test;
index index.html;
include /etc/nginx/mime.types;
}

它在瀏覽器上執行良好。但是,當我嘗試使用 curl 或使用 python 請求庫發出請求時,出現以下錯誤

無法獲得本地頒發者證書

如果我在 python 請求庫上禁用 ssl 驗證,我會得到正確的響應,但我不想禁用此驗證。

我究竟做錯了什麼?

您應該在伺服器證書文件中連接中間證書。在此處查看有關此問題的 Q/A

正如@Martin 指出的那樣,文件中證書的順序很重要。用於 TLS 1.1 的 RFC 4346 指出:

這是 X.509v3 證書的序列(鏈)。發件人的證書必須排在列表的首位。後面的每個證書必須直接證明它前面的證書。

因此順序是:

1. Your domain's certificate
2. Vendor's intermediate certificate that certifies (1)
3. Vendor's intermediate certificate that certifies (2)
...
n. Vendor's root certificate that certifies (n-1). Optional, because it should be contained in client's CA store.

還要檢查這個 RFC以獲得精確的定義

引用自:https://serverfault.com/questions/952782