No puedo generar un certificado del lado del cliente después de convertirme en mi propia autoridad de certificación

No puedo generar un certificado del lado del cliente después de convertirme en mi propia autoridad de certificación

Ime convertí en mi propia autoridad certificadoradespués de ejecutar el tutorial en:https://jamielinux.com/docs/openssl-certificate-authority/

Creé un par raíz, creé un par intermedio y firmé un certificado de servidor, que instalé en Squid de esta manera:

http_port 3129 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid3/certs/gatesentry.csr.cert.pem key=/etc/squid3/key/gatesentry.key.pem

encalamar3.conf

Squid comienza bien con esto. Todavía no estoy seguro de si realmente está funcionando o no.

Cuando intento generar un certificado del lado del cliente para instalarlo en un navegador que accederá a Internet a través del proxy, termino con un error:

Lo genero en base a laSección "Firmar certificados de servidor y cliente" que dice "Crear un certificado"

Indica que si voy a crear un certificado de cliente para autenticación, necesitaré usar la extensión 'usr_crt' y ejecuto:

cd /root/ca
openssl ca -config intermediate/openssl.conf \
      -extensions usr_cert -days 375 -notext -md sha256 \
      -in intermediate/csr/gatesentry.csr.pem \
      -out intermediate/certs/client.cert.pem
Using configuration from intermediate/openssl.conf
Enter pass phrase for /root/ca/intermediate/private/intermediate.key.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 4097 (0x1001)
        Validity
            Not Before: Jun 22 10:36:44 2016 GMT
            Not After : Jul  2 10:36:44 2017 GMT
        Subject:
            countryName               = US
            stateOrProvinceName       = Pennsylvania
            localityName              = locality
            organizationName          = Parents
            organizationalUnitName    = Security
            commonName                = gatesentry.domain.lan
            emailAddress              = [email protected]
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Cert Type: 
                SSL Client, S/MIME
            Netscape Comment: 
                OpenSSL Generated Client Certificate
            X509v3 Subject Key Identifier: 
                XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
            X509v3 Authority Key Identifier: 
                keyid:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX

            X509v3 Key Usage: critical
                Digital Signature, Non Repudiation, Key Encipherment
            X509v3 Extended Key Usage: 
                TLS Web Client Authentication, E-mail Protection
Certificate is to be certified until Jul  2 10:36:44 2017 GMT (375 days)
Sign the certificate? [y/n]: y
failed to update database
TXT_DB error number 2

No entiendo por qué recibo el mensaje de error número 2 de TXT_DB cuando ejecuto el comando como root (en otra máquina, por supuesto).

Según el tutorial, debería poder cambiar el nombre común durante este proceso.

Respuesta1

TXT_DB error number 2significa DB_ERROR_INDEX_CLASH.

Ha intentado enviar un certificado a la base de datos de OpenSSL CA con el mismo índice dos veces.

La causa de esto suele ser enviar un certificado a la base de datos que contiene el mismo número de serie o el mismo nombre común. Para esto último, busque la unique_subjectopción en el intermediate/openssl.confarchivo, sobre la cual puede leer en man ca.

El nombre común de un certificado de cliente puede ser cualquier cosa: su nombre, por ejemplo.

El nombre común se especificará en el intermediate/openssl.confarchivo. Se puede configurar para solicitar valores o leer valores del archivo de configuración. Esto está controlado por la promptopción, sobre la cual puedes leer en man req.

Respuesta2

Según el tutorial, debería poder cambiar el nombre común durante este proceso.

Ese tutorial le indica que genere una nueva clave con openssl genrsaY una nueva CSR con openssl req -newY cree el certificado a partir de la CSR con openssl ca. (Aunque, como mucha gente, dice erróneamente que un certificado se crea 'firmando la CSR'. La CA no firma la CSR. La CA firma el certificado, lo que creabasado en parte enla RSE, pero es diferente de la RSE. /despotricar)

Cuando generas una nueva CSRusted especifica el nombre del sujeto, incluido, entre otros, el nombre común, que, como dice, debe diferir de los certificados de CA que se encuentran arriba, ydeberíadifieren de otros certificados EE para evitar confusiones.

openssl caEn realidad, puede anular el nombre del sujeto de un certificado emitido (el nombre completo, no el nombre común individualmente), pero esto dará lugar a certificados con nombres diferentes para la misma clave, lo que es, en el mejor de los casos, innecesariamente confuso y, por lo general, menos seguro (aunque no se preocupan por esa parte, a otros les importa, así que no es fácil).

Error al cargar la extensión en la sección usr-crt
... sin valor... nombre=email_in_dn
¿Podría provenir de un archivo de valores predeterminados ascendente...

No directamente. openssl ca -config xxxutiliza xxx, y sólo xxx, como archivo de configuración. Si su archivo se deriva de una fuente ascendente, el nombre de la sección que desea es usr_certel que aparentemente descubrió, pero no necesita especificar usr_cert porque es el valor predeterminado. El mensaje de error sobre email_in_dn simplemente quedó en la pila de errores y el único error real fue usr-crt; una vez que lo arregle, -noemailDNno es necesario, aunque es posible que lo desee de todos modos.

¿Tiene esto algo que ver con sujetoNameAlt?

Suponiendo que quieras decir unique_subject, no. subjectAltName(no subjectNameAlt), también conocido como SAN, es una extensión común que especifica nombres alternativos para el asunto, pero unique_subjectrelaciona solo el campo básico, Subjectno ningún SAN.

Certificado del lado del cliente para instalar en un navegador que accederá a Internet a través del proxy.

Para ser claros, un certificado de cliente como este sólo es útil para autenticarse.al apoderado. No puede usar un certificado en el cliente/navegador para autenticarse en algo en Internet a través de CUALQUIER HTTPS MitM, y no puede usar un certificado de cliente que usted mismo emita para autenticarse en los sistemas de otra persona en Internet.

información relacionada