Назад | Перейти на главную страницу

Ошибка «SSL3_GET_CLIENT_CERTIFICATE: одноранговый узел не вернул сертификат» на 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
        }
    }

Файл 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.