sto supponendo che si sta parlando di questo certificato da UTN-USERFi RST-Hardware:
-----BEGIN CERTIFICATE-----
MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
-----END CERTIFICATE-----
In una versione leggibile:
Version: 3 (0x2)
Serial Number:
44:be:0c:8b:50:00:24:b4:11:d3:36:2a:fe:65:0a:fd
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware
Validity
Not Before: Jul 9 18:10:42 1999 GMT
Not After : Jul 9 18:19:22 2019 GMT
Subject: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware
Subject Public Key Info:
[...]
X509v3 extensions:
X509v3 Key Usage:
Digital Signature, Non Repudiation, Certificate Sign, CRL Sign
X509v3 Basic Constraints: critical
CA:TRUE
X509v3 Subject Key Identifier:
A1:72:5F:26:1B:28:98:43:95:5D:07:37:D5:85:96:9D:4B:D2:C3:45
X509v3 CRL Distribution Points:
Full Name:
URI:http://crl.usertrust.com/UTN-USERFirst-Hardware.crl
X509v3 Extended Key Usage:
TLS Web Server Authentication, IPSec End System, IPSec Tunnel, IPSec User
In sostanza, abbiamo qui un certificato CA sia con X509v3 Key Usage
e X509v3 Extended Key Usage
.
Tuttavia, RFC 3280 says the following about the extended key usage extension:
In generale, questa estensione apparirà solo un'entità finale certificati.
Questo non inizia molto bene per un CERT CA, ma in seguito, nella stessa sezione dice anche questo:
Se un certificato contiene sia una chiave di utilizzo estensione e di un esteso utilizzo della chiave estensione, quindi entrambe le estensioni DEVONO essere elaborate in modo indipendente e il certificato DEVE essere utilizzato solo per uno scopo coerente con entrambe le estensioni. Se non esiste uno scopo costante con con entrambe le estensioni, il certificato NON DEVE essere utilizzato per nessuno scopo .
L'unica estensione utilizzo chiave estesa in questo cert che è in questa RFC è TLS Web server di autenticazione:
id-kp-serverAuth OBJECT IDENTIFIER ::= { id-kp 1 }
-- TLS WWW server authentication
-- Key usage bits that may be consistent: digitalSignature,
-- keyEncipherment or keyAgreement
Naturalmente, questo non è coerente con keyCertSign
, che, secondo la RFC 3280 (e RFC 5280). (Dubito anche che le estensioni IPSec siano compatibili con keyCertSign
). Ciò rende questo certificato inutile per emettere certificati (non molto utile per un certificato CA).
Vorrei contattare il sito Web utilizzando questo certificato per chiedere loro di contattare la loro CA (UTN-USERFirst-Hardware, apparentemente Comodo) e chiedere loro di risolvere questo problema. Devo dire che non sembra buono proveniente da persone che fanno i loro soldi sul retro di questi RFC.
Naturalmente, questo potrebbe richiedere un po 'di tempo e non risolverebbe il tuo problema immediato.
Penso di aver visto questo oggetto DN (UTN-USERFirst-Hardware) in altri certificati CA intermedi, quindi quello sopra potrebbe non essere quello che stai utilizzando.
Quello che potresti essere in grado di fare (purché tu sia in grado di verificare manualmente il certificato del server stesso nonostante questi problemi) è di usare uno SSLContext
e uno TrustManager
specificamente limitato per usare quel certificato molto, per questa connessione. Ciò potrebbe impedire all'algoritmo del percorso di certificazione di cercare di trovare il certificato emittente e rientrare in questo problema.
EDIT:
Qui ci sono ulteriori dettagli su questa soluzione (che dovrebbe comunque mantenere la vostra connessione protetta).
- Connettersi con Firefox a questo sito Web.
- Fare clic sulla blu/barra verde e scegliere 'Altre informazioni ...'
- Sicurezza -> Visualizza certificato -> Dettagli
- Scegliere il certificato server dall'elenco in alto e scegliere 'Export ... '
- Lo stesso file PEM da qualche parte.
Usa keytool
per creare un nuovo keystore (scegliere di fidarsi di quel certificato e scegliere una password sensibile):
keytool -importcert -keystore example.jks -file example.pem
Quindi, utilizzare questo codice Java, che non dovrebbe essere troppo difficile da porta Groovy:
TrustManagerFactory tmf = TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyStore ks = KeyStore.getInstance("JKS");
FileInputStream fis = new FileInputStream("/.../example.jks");
ks.load(fis, null);
// or ks.load(fis, "thepassword".toCharArray());
fis.close();
tmf.init(ks);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
URL url = new URL("https://somewebsite.com");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setSSLSocketFactory(sslContext.getSocketFactory());
InputStream is = conn.getInputStream();
Molto probabilmente il server non ha il certificato radice corretto installato, quindi non può verificare che il certificato SSL che il sito sta dando sia valido. –
Grazie- Ho acquistato un certificato SSL e l'ho installato su questo server. Potrebbe avere qualcosa a che fare con questo? O è non correlato? –
Dipende, viene visualizzato questo errore durante la connessione dal server a un'altra macchina o da un'altra macchina al server? –