Ssl

lighttpd 上的錯誤“SSL3_GET_CLIENT_CERTIFICATE:peer 未返回證書”

  • April 7, 2017

我正在使用有效的證書,但我無法獲得客戶端證書。lighttpd 服務失敗並出現錯誤:

(connections-glue.c.200) SSL: 1 error:140890C7:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:peer did not return a certificate

我的配置是這樣的:

$SERVER["socket"] == ":443" {
           protocol     = "https://"
           ssl.engine   = "enable"
           ssl.disable-client-renegotiation = "enable"



           #server.name = "mywebsite.com"
           ssl.pemfile               = "/etc/lighttpd/ssl/mywebsite.com.pem"
           ssl.ca-file               = "/etc/lighttpd/ssl/mywebsite.com.csr"


           ssl.ec-curve              = "secp384r1"
           ssl.use-sslv2 = "disable"
           ssl.use-sslv3 = "disable"
           ssl.honor-cipher-order    = "enable"
           ssl.cipher-list           = "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS"

           # HSTS(15768000 seconds = 6 months)
           #setenv.add-response-header  = (
           #   "Strict-Transport-Security" => "max-age=15768000;"
           #)

           #ask for client cert
           ssl.verifyclient.exportcert = "enable" 
           ssl.verifyclient.activate   = "enable" 
           ssl.verifyclient.username   = "SSL_CLIENT_S_DN_CN" 
           ssl.verifyclient.enforce    = "enable" 
           ssl.verifyclient.depth      = 3
       }
   }

ssl.ca 文件讀取內容,您可以在此處呼叫任何文件類型,即使是 .txt 文件,如果內容是證書或證書鏈,對於 lighttpd 都沒關係。

當您啟用 ssl.verifyclient.activate 時,lighttpd 將請求在 ca 文件中具有根 CA 證書的證書。

如果我想使用第 3 方證書,例如 ICP-Brazil,它是所有個人證書的根。該證書由該實體簽署,證明您是真正的您,並且在您的法庭上具有法律效力。ICP-Brazil 目前有 5 個版本的根證書,因此如果系統應該支持舊證書(可能有效期為 6 年),這意味著您需要在 ssl.ca-file 中放置多個證書。如此處所述:https ://schnouki.net/posts/2014/08/12/lighttpd-and-ssl-client-certificates/

關於錯誤:

(connections.c.305)SSL:1 錯誤:140890C7:SSL 常式:SSL3_GET_CLIENT_CERTIFICATE:peer 沒有返回證書

發生這種情況是因為一些原因:

  • 客戶端沒有任何有效證書(與 ssl.CA 文件中的根證書匹配)
  • 連接在 ssl 握手完成之前中斷。這可能是由於選擇證書或輸入證書密碼的時間過長,甚至是網路重啟造成的。
  • 您使用的是 CDN 網路(例如 cloudflare 或 ovh cdn),客戶端和伺服器之間的連接應該直接進行握手。

所以我得出的結論是,這並不是真正需要糾正的錯誤,而是 ssl 握手技術的局限性。

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