Ошибка «SSL3_GET_CLIENT_CERTIFICATE: peer не вернул сертификат» на lighttpd

Я использую действительный сертификат, но не могу получить сертификат клиента. Служба lighttpd завершается с ошибкой:

(connections-glue.c.200) SSL: 1 ошибка: 140890C7: подпрограммы SSL: SSL3_GET_CLIENT_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
        }
    }
0
задан 7 March 2017 в 22:57
1 ответ

Файл ssl.ca считывает содержимое, здесь вы можете вызвать любой тип файла, даже .txt. Для lighttpd не имеет значения, является ли содержимое сертификатом или цепочкой сертификатов.

Когда вы включаете ssl.verifyclient.activate, lighttpd будет запрашивать сертификат, который имеет сертификат (сертификаты) корневого CA внутри ca-файла.

Если я хочу использовать сторонний сертификат, например, ICP-Brazil, это корень всех личных сертификатов. Этот сертификат подписан этим лицом и является доказательством того, что вы действительно являетесь вами, и имеет юридический вес в вашем суде. ICP-Brazil имеет сегодня 5 версий своего корневого сертификата, поэтому, если система должна поддерживать устаревший сертификат (срок действия которого может составлять до 6 лет), это означает, что вам нужно разместить более одного сертификата в файле ssl.ca. Как описано здесь: https://schnouki.net/posts/2014/08/12/lighttpd-and-ssl-client-certificates/

Об ошибке:

(connections.c.305) SSL: 1 ошибка: 140890C7: подпрограммы SSL: SSL3_GET_CLIENT_CERTIFICATE: одноранговый узел не вернул сертификат

Это происходит по некоторым причинам:

  • У клиента нет действительного сертификата (который соответствует корневому сертификаты по ssl. CA-файл)
  • Соединение прервано до завершения подтверждения ssl. Это может быть вызвано очень долгим выбором сертификата или ввода пароль сертификата или даже перезапуск сети.
  • Вы используете сеть CDN (например, cloudflare или ovh cdn), соединение между клиентом и сервером должно быть прямым для установления связи.

Итак, я пришел к выводу, что это на самом деле это не ошибка, которую нужно исправить, а скорее ограничения технологии дрожания руки ssl.

4
ответ дан 4 December 2019 в 11:44

Теги

Похожие вопросы