seguridad para instalar generar crear como certificado autofirmado apache ssl https openssl pki

para - instalar certificado ssl apache debian



certificados de cliente emitidos por mi propia CA con Apache (1)

Intentando que una sesión HTTPS funcione usando certificados de cliente de una CA autofirmada. La conexión debe verificar que todos los certificados sean válidos, tanto del lado del cliente como del servidor.

El proceso que seguí es redondo de la siguiente manera:

  1. Crear una autoridad de certificación

    openssl genrsa -out CA.key 4096 openssl req -new -key CA.key -out CA.csr openssl x509 -req -days 365 -in CA.csr -out CA.crt -signkey CA.key

  2. Crear certificado de servidor

    openssl genrsa -out server.key 4096 openssl req -new -key server.key -out server.csr openssl ca -in server.csr -cert CA.crt -keyfile CA.key -out server.crt

  3. Crear certificado de cliente

    openssl genrsa -out client.key 4096 openssl req -new -key client.key -out client.csr openssl ca -in client.csr -cert CA.crt -keyfile CA.key -out client.crt

  4. Configurar Apache

    <VirtualHost _default_:443> SSLEngine on SSLCertificateFile "server.crt" SSLCertificateKeyFile "server.key" SSLCACertificateFile "CA.crt" <Directory "/var/www"> SSLVerifyClient optional SSLVerifyDepth 10 SSLOptions +StdEnvVars +ExportCertData </Directory> </VirtualHost>

Ahora intento hacer una conexión de prueba:

wget / --post-data ''id=1234'' / --certificate=client.crt / --ca-certificate=CA.crt / https://test.example.com:443

La salida resultante de wget muestra (una y otra vez), en parte:

HTTP request sent, awaiting response... No data received. Retrying.

Comprobando el registro de errores de SSL de Apache, me da los siguientes mensajes:

[debug] ssl_engine_io.c(1606): [client xx.xx.xx.xx] total of 41 bytes in buffer, eos=1 [client xx.xx.xx.xx] Requesting connection re-negotiation [debug] ssl_engine_io.c(1908): OpenSSL: I/O error, 5 bytes expected to read on BIO#80b075190 [mem: 80b0ca003] [debug] ssl_engine_kernel.c(771): [client xx.xx.xx.xx] Performing full renegotiation: complete handshake protocol (client does support secure renegotiation) [debug] ssl_engine_kernel.c(1892): OpenSSL: Handshake: start [debug] ssl_engine_kernel.c(1900): OpenSSL: Loop: SSL renegotiate ciphers [debug] ssl_engine_kernel.c(1900): OpenSSL: Loop: SSLv3 write hello request A [debug] ssl_engine_kernel.c(1900): OpenSSL: Loop: SSLv3 flush data [debug] ssl_engine_kernel.c(1900): OpenSSL: Loop: SSLv3 write hello request C [info] [client xx.xx.xx.xx] Awaiting re-negotiation handshake [debug] ssl_engine_kernel.c(1892): OpenSSL: Handshake: start [debug] ssl_engine_kernel.c(1900): OpenSSL: Loop: before accept initialization [debug] ssl_engine_io.c(1908): OpenSSL: I/O error, 5 bytes expected to read on BIO#80b075190 [mem: 80b0ca003] [debug] ssl_engine_kernel.c(1929): OpenSSL: Exit: error in SSLv3 read client hello B [error] [client xx.xx.xx.xx] Re-negotiation handshake failed: Not accepted by client!? [debug] ssl_engine_io.c(1650): [client xx.xx.xx.xx] read from buffered SSL brigade, mode 0, 8192 bytes [debug] ssl_engine_io.c(1725): [client xx.xx.xx.xx] buffered SSL brigade exhausted [debug] ssl_engine_io.c(1650): [client xx.xx.xx.xx] read from buffered SSL brigade, mode 2, 0 bytes [info] [client XX:XX:XX:XX::xx] Connection to child 3 established (server register.kiosk.tain.com:443) [info] Seeding PRNG with 656 bytes of entropy [debug] ssl_engine_kernel.c(1892): OpenSSL: Handshake: start [debug] ssl_engine_kernel.c(1900): OpenSSL: Loop: before/accept initialization

Ejecute el cliente de openssl para ver si hay algo para ayudar aquí:

openssl s_client / -showcerts / -connect test.example.com:443 / -cert client.crt / -key client.key / -CAfile CA.crt

En la respuesta veo lo siguiente:

--- Server certificate subject=/C=XX/ST=XXXXX/O=XXXX/CN=test.example.com issuer=/O=XXXX/L=XXXXX/ST=XXXXX/C=SE/CN=XXXX Certificate Authority --- No client certificate CA names sent --- SSL handshake has read 3846 bytes and written 519 bytes --- New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-GCM-SHA384 Server public key is 4096 bit

"Ningún certificado de cliente envía nombres de CA" se ve diferente a lo que estoy esperando. Quiero certificados de cliente.

¿Dónde estoy equivocado?


Realmente no tiene sentido hablar de una "CA autofirmada". Su título (" Certificados SSL de cliente autofirmado [...] ") sugiere que está hablando de un certificado de cliente autofirmado. Usted no: está hablando de certificados de clientes emitidos por su propia CA.

Ha colocado su directiva SSLVerifyClient dentro de una sección de Directory , lo que implicaría una renegociación para obtener el certificado del cliente, una vez que el cliente haya realizado una solicitud para intentar acceder a ese directorio.

Como no hay una directiva DocumentRoot en su configuración, no está claro si una solicitud en / intentará acceder a este directorio (esto puede depender de las opciones de compilación dependiendo de cómo se haya empaquetado, pero /var/www no es el valor predeterminado de lo contrario) )

Si SSLVerifyClient directamente en su host virtual, al menos debe hacer que openssl s_client vea una solicitud de certificado de cliente. La reparación de DocumentRoot podría no ser suficiente, ya que necesitaría realizar la solicitud HTTP para activar la renegociación.