web-dev-qa-db-ja.com

lighttpdでエラー「SSL3_GET_CLIENT_CERTIFICATE:ピアが証明書を返さなかった」

有効な証明書を使用していますが、クライアント証明書を取得できません。 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
        }
    }
1
LeonanCarvalho

Ssl.ca-fileはコンテンツを読み取り、ここで任意のファイルタイプを呼び出すことができます。txtであっても、コンテンツが証明書または証明書チェーンである場合、lighttpdには関係ありません。

Ssl.verifyclient.activateを有効にすると、lighttpdは、ca-file内のルートCA証明書によって署名された証明書を要求します。

ICP-Brazilなどのサードパーティの証明書を使用する場合は、それがすべての個人証明書のルートです。この証明書はこのエンティティによって署名されており、あなたが本当にあなたであり、法廷で法的重要性を持っていることの証明です。 ICP-ブラジルには現在、ルート証明書の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:ピアは証明書を返しませんでした

それはいくつかの理由で起こっています:

  • クライアントに有効な証明書がありません(SSLのルート証明書と一致します。CAファイル)
  • SSLハンドシェイクが完了する前に中断された接続。これは、証明書の選択や証明書パスワードの入力に非常に長い時間がかかったり、ネットワークが再起動したりすることによっても発生します。
  • CDNネットワーク(cloudflareやovh cdnなど)を使用している場合、クライアントとサーバー間の接続は、ハンドシェイクを直接行う必要があります。

したがって、これは実際には修正すべきバグではなく、sslハンドシェイク技術の制限であると結論付けます。

5
LeonanCarvalho