Recent Changes - Search:

Accueil

OpenSSL

SyncML

Apache Portable Runtime

Libxml2

Net-snmp

CUrl

Boost

Perl

ZLib

Samba

VPN

Serveurs de messagerie

edit

OpenSSL/UnableToGetLocalIssuerCertificate

Comment éviter l'erreur 'unable to get local issuer certificate' ?

Lors de l'utilisation du SSL, il n'est pas rare de rencontrer cette erreur, voici une explication sur la façon de l'éviter.

OpenSSL> s_client -showcerts -connect www.google.com:443
Loading 'screen' into random state - done
CONNECTED(00000798)
depth=1 /C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain

 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
   i:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA

-----BEGIN CERTIFICATE-----
MIIDITCCAoqgAwIBAgIQS6WuWd7dHMeAfIkikfDiQzANBgkqhkiG9w0BAQQFADBM
MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg
THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wNjA1MTUyMzE4MTFaFw0w
NzA1MTUyMzE4MTFaMGgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlh
MRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRMwEQYDVQQKEwpHb29nbGUgSW5jMRcw
FQYDVQQDEw53d3cuZ29vZ2xlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
gYEA5sXGjc0LowME3K7MyUa+vcydvHM0SP7TdWTQycl2J3IPqZYaO4HzFPaukFbn
GdJzaKeFpK7KJBQwALroNl2BczpxBY+xrxGH2lzxPr9TUYRvRA636CbXL7Jv8vJd
36fPjKXpHm8wSJQhCwGtug5xAQ0Q77/uLNON/lSo/tOXj8sCAwEAAaOB5zCB5DAo
BgNVHSUEITAfBggrBgEFBQcDAQYIKwYBBQUHAwIGCWCGSAGG+EIEATA2BgNVHR8E
LzAtMCugKaAnhiVodHRwOi8vY3JsLnRoYXd0ZS5jb20vVGhhd3RlU0dDQ0EuY3Js
MHIGCCsGAQUFBwEBBGYwZDAiBggrBgEFBQcwAYYWaHR0cDovL29jc3AudGhhd3Rl
LmNvbTA+BggrBgEFBQcwAoYyaHR0cDovL3d3dy50aGF3dGUuY29tL3JlcG9zaXRv
cnkvVGhhd3RlX1NHQ19DQS5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQQF
AAOBgQBXS7ykQ+fgAZKgljX5GAiIHXtwGY/5NrIFOgXKFFlNJA7liq9Oh1r3HCqW
j8thQJ7StDhAISTBTx/LE0qPlQLfkT3WQOsRb5sQoW/OkV4w9m0TXhWkLsIYngDD
2DJnR/y4HprZmo7M/3wStwO/UiDPIfTzd90SFfCU+pDV41logQ==
-----END CERTIFICATE-----

 1 s:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
   i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
-----BEGIN CERTIFICATE-----
MIIDIzCCAoygAwIBAgIEMAAAAjANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJV
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsTLkNsYXNzIDMgUHVi
bGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNTEzMDAw
MDAwWhcNMTQwNTEyMjM1OTU5WjBMMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhh
d3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBD
QTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1NNn0I0Vf67NMf59HZGhPwtx
PKzMyGT7Y/wySweUvW+Aui/hBJPAM/wJMyPpC3QrccQDxtLN4i/1CWPN/0ilAL/g
5/OIty0y3pg25gqtAHvEZEo7hHUD8nCSfQ5i9SGraTaEMXWQ+L/HbIgbBpV8yeWo
3nWhLHpo39XKHIdYYBkCAwEAAaOB/jCB+zASBgNVHRMBAf8ECDAGAQH/AgEAMAsG
A1UdDwQEAwIBBjARBglghkgBhvhCAQEEBAMCAQYwKAYDVR0RBCEwH6QdMBsxGTAX
BgNVBAMTEFByaXZhdGVMYWJlbDMtMTUwMQYDVR0fBCowKDAmoCSgIoYgaHR0cDov
L2NybC52ZXJpc2lnbi5jb20vcGNhMy5jcmwwMgYIKwYBBQUHAQEEJjAkMCIGCCsG
AQUFBzABhhZodHRwOi8vb2NzcC50aGF3dGUuY29tMDQGA1UdJQQtMCsGCCsGAQUF
BwMBBggrBgEFBQcDAgYJYIZIAYb4QgQBBgpghkgBhvhFAQgBMA0GCSqGSIb3DQEB
BQUAA4GBAFWsY+reod3SkF+fC852vhNRj5PZBSvIG3dLrWlQoe7e3P3bB+noOZTc
q3J5Lwa/q4FwxKjt6lM07e8eU9kGx1Yr0Vz00YqOtCuxN5BICEIlxT6Ky3/rbwTR
bcV0oveifHtgPHfNDs5IAn8BL7abN+AqKjbc1YXWrOU/VG+WHgWv
-----END CERTIFICATE-----
---
Server certificate
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
issuer=/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
---
No client certificate CA names sent
---
SSL handshake has read 1777 bytes and written 346 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
SSL-Session:
Protocol : TLSv1 Cipher : AES256-SHA Session-ID: FB832C23E220FBE594FB3BB02EDA46E0A24003E75AC0D59A29070F84B0818F2F
Session-ID-ctx: Master-Key: 2882FD1D3D850ED09551E3705F39BFB7C262F6136D4BEFA73CBDB779BB4A42D51C744E8F1CD3339BF54BEA11C9768F07 Key-Arg : None Start Time: 1169407304 Timeout : 300 (sec) Verify return code: 20 (unable to get local issuer certificate)

---
read:errno=0

Dans l'exemple ci-dessus, OpenSSL reléve une erreur sur deuxième certificat (depth=1), qui contient ceci :
1 s:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
ce qu'il faut interpréter par : nous avons une erreur sur le certificat Thawte SGC CA car son émetteur VeriSign, Inc. n'est pas connu. La correction de cette erreur passera par la création d'une liste de certificats de confiance qui deviendront les premiers maillons des futures chaines de confiance.

Attention, en ajoutant un certificat racine à la liste des certificats de confiance (Trusted certificates) nous acceptons d'office l'ensemble des certificats qu'il a émis et qu'il émettra sur la base du principe suivant : les amis de mes amis sont aussi mes amis.



Deux méthodes d'alimentation de la liste de confiance

Méthode avec -CAfile

Cette méthode simple consiste à utiliser un fichier unique contenant une ou plusieurs CA,
en conservant les étiquettes -----BEGIN CERTIFICATE----- et -----END CERTIFICATE----- de chacun.
Nous pourrions avoir la mauvaise idée d'utiliser le certificat retourné par le serveur comme étant la racine de notre chaine de confiance (commençant à Thawte SGC CA), reste que dans ce cas, ce certificat n'étant pas racine (un certificat racine est forcement un certificat x509 autosigné), nous aurions toujours une erreur.

depth=1 /C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
verify error:num=20:unable to get local issuer certificate
verify return:0



La seule méthode valable consiste à télécharger :
- Les root CA. (Celles de Verisign et Thawte car acheté fin 1999 par Verisign) sont à cette adresse VeriSign Primary PCA Root Certificates.
- Les CA intermédiaires ( Celles de Vérisign sont à cette adresse http://www.verisign.com/support/advisories/page_040611.html )


Le fichier concernant le certificat Class 3 Public Primary Certification Authority (étiquette OU de l'emétteur du certificat thawte) est le fichier PCA3ss_v4.509
Nous devons le convertir par

OpenSSL> x509 -inform der -in "C:\VeriSign - Thawte Combined Roots\VeriSign_Roots\PCA3ss_v4.509"
-----BEGIN CERTIFICATE-----
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
-----END CERTIFICATE-----

La requête se fait alors par

OpenSSL> s_client -CAfile PCA3ss_v4.crt -showcerts -connect www.google.com:443
.../...
depth=2 /C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
verify return:1
depth=1 /C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
verify return:1
depth=0 /C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
verify return:1
.../...
New, TLSv1/SSLv3, Cipher is AES256-SHA Server public key is 1024 bit SSL-Session:

    Protocol  : TLSv1
    Cipher    : AES256-SHA
    Session-ID: 30972D8B1DAFDA917A649AE3E6D9170CCDC2A8BD0278189F9B0FFC0F0080D30E
    Session-ID-ctx:
    Master-Key: B74F5E6C2395B04303CE0B745D5DD5DA0B9ADE3D5B4111E3ECC02B42F99A611B63A400F176DFD216BB3D64382C89260F
    Key-Arg   : None
    Start Time: 1169412087
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

---
read:errno=0



Méthode avec -CApath

Cette méthode utilise un répertoire unique contenant tous les certificats sous forme de fichiers indépendants.
Le nom du fichier contenant le certificat est calculé par hash de la valeur du CN.

OpenSSL> x509 -noout -hash -in PCA3ss_v4.crt
a386470b

Reste à renommer le fichier du certificat avec la valeur obtenue ci-dessus et à lui ajouter un suffixe numérique commençant à zéro pour parer l'éventualité d'une collision de valeur de hash.
Notre fichier PCA3ss_v4.crt s'appelle maintenant a386470b.0.
Dans l'exemple ci-dessous, une fois copié dans le répertoire C:\TrustedCA\, nous pouvons lancer la commande suivante avec succès :

OpenSSL> s_client -CApath C:\TrustedCA\ -showcerts -connect www.google.com:443


Edit - History - Print - Recent Changes - Search
Page last modified on March 12, 2009, at 09:37 AM