req read generate from create certificate openssl

certificate - read - Firmar un certificado con mi CA



read certificate openssl (6)

Acabo de encontrarme con este problema. La causa raíz es una discrepancia entre los valores de string_mask en el cliente y la openssl.cnf de la CA. La solución fácil es modificar el valor del cliente para que coincida con lo que espera la CA, y luego volver a generar el CSR. La solución más difícil es editar el valor de la CA e iniciar una CA nueva.

En funcionamiento:

openssl ca -in ${ALIAS}.csr -out user-cert.pem -keyfile cacert-private.pem -cert cacert.pem -passin pass:$PASSWD -config ${CONFIG}

Yo obtengo:

El campo stateOrProvinceName debía ser el mismo en el certificado de CA (Gloucestershire) y en la solicitud (Gloucestershire)

He leído el error varias veces y estoy bastante seguro de que el campo tiene el mismo valor en cada caso. He encontrado referencias a problemas similares causados ​​por diferentes codificaciones, pero no sé cómo debería especificar eso y dónde.

Este es el $ {ALIAS} .csr:

-----BEGIN NEW CERTIFICATE REQUEST----- MIICxzCCAa8CAQAwgYExCzAJBgNVBAYTAkdCMRgwFgYDVQQIEw9HbG91Y2VzdGVyc2hpcmUxEzAR BgNVBAcTCkNoZWx0ZW5oYW0xHzAdBgNVBAoTFldhbnNkeWtlIEhvdXNlIExpbWl0ZWQxDjAMBgNV BAsTBUZpemlvMRIwEAYDVQQDEwlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQDWvivt1JHiuaNeadOQJtxynQ4sSAR/peWgKd8g9UQgNM+H9QW4NlRE81+g63BdRqZT5YMm J4K3upovQNlDRklevslgEYoTdQM4yBKV676Q4XDbM7Vk+rt04sqL5IgdsAUXODfMJvu81t3tOjFc OGO7S+B+LEJ1+8qshLbuK2gBigfgcZtlbNgW6fCGik8ZsrKWl8W+NFbw1seS01INAipwCBasxaaj /lINwWQVbQIG09+vEdwuHmmq5VIKlJqFcYNUTFBVojoJLfzyStZR2PfFUxp7R+t2YmVj6a48B7NA lODnIlQDkAprECNMpCZoSP1QjrZgW1BgaVbT5OaWlVsPAgMBAAGgADANBgkqhkiG9w0BAQUFAAOC AQEAvalFyJOgzmd1jcFlS5YoqiNgX1bm9nZ0/cFgj6cGL7R0Gqc9wu5QPakWRxa9c2UcI0m7p1lp cygDvQTY23LEBhVcruymIGQG5DhDpXHeaBCbV3OWO6xowAjh+riQjvTNeVSXtP3jUNs5DaId0z+A GXeb7dR96jhyj+soNYENoQseQLqLdAW4p0jdK1BraMJTc0ber0FBx1nOUXOEoTIJL9kL9cUWaCp3 7uYkonIPtVCCfS8KcgXxUsNMC41q/SkKDVB23PeCjnWgcyXxnSpx8n+AK7fwMgh+4TcZ5usmVujR MNqk84hZpw8h1FIcmqRaWtaPWyv3EX8JH5LTnDe3eQ== -----END NEW CERTIFICATE REQUEST-----

Y cacert.pem:

-----BEGIN CERTIFICATE----- MIIDQDCCAqmgAwIBAgIJAPj9mvMDl1K/MA0GCSqGSIb3DQEBBQUAMIG4MQswCQYD VQQGEwJHQjEYMBYGA1UECAwPR2xvdWNlc3RlcnNoaXJlMRMwEQYDVQQHDApDaGVs dGVuaGFtMR8wHQYDVQQKDBZXYW5zZHlrZSBIb3VzZSBMaW1pdGVkMQ4wDAYDVQQL DAVGaXppbzESMBAGA1UEAwwJbG9jYWxob3N0MTUwMwYJKoZIhvcNAQkBFiZyaWNo YXJkLm1pZHdpbnRlckB3YW5zZHlrZS1ob3VzZS5jby51azAeFw0xMTA4MDcyMTU4 NDBaFw0yMTA4MDQyMTU4NDBaMIG4MQswCQYDVQQGEwJHQjEYMBYGA1UECAwPR2xv dWNlc3RlcnNoaXJlMRMwEQYDVQQHDApDaGVsdGVuaGFtMR8wHQYDVQQKDBZXYW5z ZHlrZSBIb3VzZSBMaW1pdGVkMQ4wDAYDVQQLDAVGaXppbzESMBAGA1UEAwwJbG9j YWxob3N0MTUwMwYJKoZIhvcNAQkBFiZyaWNoYXJkLm1pZHdpbnRlckB3YW5zZHlr ZS1ob3VzZS5jby51azCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA03Y4hYdd at3e3AB98s+E5wlxrvRL8RhJtRac0Jt0gXQy12ZYziFm3gryx0IG02srXluM+V3/ BPRRCLsnEnltfoi/fE0wM9MT0V1Ao9EXQ5t1E2rOzdoXUUdvovd6qvwG2L/DHCdL kKjhokVR9TkFW/AWctBdWkb9qfFFTpDY4i0CAwEAAaNQME4wHQYDVR0OBBYEFHbG d3+Lzax90slk65y1BYDgZ897MB8GA1UdIwQYMBaAFHbGd3+Lzax90slk65y1BYDg Z897MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEArZ2yfTGJK3R+jRwP FjaonDy1NVOt9tgjHfyh9YNQfyFSC7R987wFPcyydEqh8xg/Lb3WGwseDuzCBusw jmVIqiUYBClHzkF3jG1766ltdlVVTOavVQgQMRBGMvpHVxcMH2RUNUyWH0XW+DH2 /uuRRpu4vX5sfEW75uEfORB9Mrg= -----END CERTIFICATE-----

¿Algunas ideas? Gracias por adelantado.


Como se muestra :

openssl asn1parse -in req.csr

las cadenas de DN de solicitud se codifican como PRINTABLESTRING.

openssl asn1parse -in cacert.pem

muestra que las cadenas de CA DN están codificadas como UTF8STRING.

Para un truco rápido, te sugiero que cambies la codificación de las cadenas en tu solicitud reemplazando el tipo de codificación de PRINTABLESTRING (0x13) por el tipo de UTF8STRING (0x0c), usando tu editor hexadecimal favorito.
Tendrá que convertir su solicitud en DER antes de pincharla.
El desplazamiento de los bytes a cambiar se puede encontrar con:

openssl asn1parse -in csr |grep PRINTABLESTRING |awk -F":" ''{print $1}''

Entonces trata de firmar de nuevo.


Los carteles anteriores ya respondieron a la pregunta, pero para hacerlo más fácil, aquí hay un ejemplo de cómo especificar la codificación. Usa la string_mask:

[ req ] default_bits = 2048 default_md = rsa prompt = no string_mask = utf8only # <-------------- distinguished_name = req_distinguished_name [ req_distinguished_name ] countryName = GB stateOrProvinceName = Gloucestershire localityName = Cheltenham organizationName = Wansdyke House Limited organizationalUnitName = Fizio commonName = localhost


También me he encontrado con este problema. Gracias a las respuestas anteriores (principalmente a François), descubrí la fuente del problema.

openssl está codificando con UTF8STRING y keytool (Java 6) está codificando con PRINTABLESTRING.

Se resolvió cambiando la configuración de openssl para que coincida con keytool. En /usr/ssl/openssl.cnf, cambie la configuración "string_mask" a "pkix".


También puede establecer los atributos como opcionales:

# For the CA policy [policy_match] countryName= optional stateOrProvinceName= optional organizationName= optional organizationalUnitName= optional commonName= supplied emailAddress= optional


Promover el comentario de mbrownnyc a una respuesta, ya que me fue útil y merece más atención.

Creo que /usr/ssl/openssl.cnf contiene una política llamada policy_anything que contiene la configuración anterior. Puede usarlo utilizando el argumento de la policy siguiente manera:

openssl ca -policy policy_anything -days 365 -out /root/ca/certs/out.pem -in certreq.csr