web-dev-qa-db-fra.com

Signature d'un certificat avec mon CA

En cours d'exécution:

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

Je reçois:

Le champ stateOrProvinceName devait être le même dans le certificat CA (Gloucestershire) et la demande (Gloucestershire)

J'ai lu l'erreur plusieurs fois et je suis assez sûr que le champ a la même valeur dans chaque cas. J'ai trouvé des références à des problèmes similaires causés par différents encodages, mais je ne sais pas comment je devrais spécifier cela et où.

Voici le $ {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-----

Et 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-----

Des idées? Merci d'avance.

44
rich

J'ai également rencontré ce problème. Grâce aux réponses ci-dessus (principalement François), j'ai découvert la source du problème.

openssl encode en utilisant UTF8STRING et keytool (Java 6) encode avec PRINTABLESTRING.

Contourné en modifiant la configuration openssl afin qu'elle corresponde à keytool. Dans /usr/ssl/openssl.cnf, changez le paramètre "string_mask" en "pkix".

24
Reg Whitton

Vous pouvez également définir les attributs comme facultatifs:

# For the CA policy

[policy_match]
countryName= optional
stateOrProvinceName= optional
organizationName= optional
organizationalUnitName= optional
commonName= supplied
emailAddress= optional
41
Yogesh Chawla

Les affiches précédentes ont déjà répondu à la question, mais pour vous faciliter la tâche, voici un exemple comment spécifier l'encodage. Utilisez le 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
17
MacFreek

Comme le montre:

openssl asn1parse -in req.csr  

les chaînes DN de demande sont codées comme PRINTABLESTRING.

openssl asn1parse -in cacert.pem 

montre que les chaînes CA DN sont codées en UTF8STRING.

Pour un hack rapide et sale, je vous suggère de modifier l'encodage des chaînes dans votre demande en remplaçant le type d'encodage pour PRINTABLESTRING (0x13) par le type pour UTF8STRING (0x0c), en utilisant votre éditeur hexadécimal préféré.
Vous devrez convertir votre demande en DER avant de la pousser.
Le décalage des octets à modifier peut être trouvé avec:

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

Essayez ensuite de signer à nouveau.

9
Francois

Promouvoir commentaire de mbrownnyc à une réponse, car elle m'a été utile et mérite plus d'attention.

Je crois /usr/ssl/openssl.cnf contient une stratégie appelée policy_anything qui contient la configuration ci-dessus. Vous pouvez l'utiliser en utilisant l'argument policy comme suit:

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

Je viens de rencontrer ce problème. La cause première est une non-concordance entre les valeurs de string_mask dans le client et le CA openssl.cnf. La solution la plus simple consiste à modifier la valeur du client pour qu'elle corresponde aux attentes de l'autorité de certification, puis à régénérer la CSR. La solution matérielle consiste à modifier la valeur de l'autorité de certification et à démarrer une nouvelle autorité de certification.

6
divestoclimb