Я использую java 8 , чтобы позвонить в OCSP и подтвердить сертификат. Я столкнулся с исключением «устарел». Администратор респондента OCSP сказал мне, что они используют часовой пояс GMT +0, и он все еще отлично работает с другими клиентами . Вот мой код:
public static String verifyCertificate(String cert, String intermediateCert, String cacert, String oscpCert){
try{
//Declare truststore and responderURL
String cacertsFile = "/home/aceadmin/cacerts";
String cacertsPassword = "changeit";
String responderUrl = "http://pki-ocsp-internal.agribank.com.vn";
Security.setProperty("ocsp.enable", "true");
System.setProperty("com.sun.security.ocsp.clockSkew", "86400");
CertificateFactory cf = CertificateFactory.getInstance("X.509");
byte[] byteCert = Base64.getDecoder().decode(cert);
ByteArrayInputStream byteA = new ByteArrayInputStream(byteCert);
X509Certificate cert1 = (X509Certificate) cf.generateCertificate(byteA);
byte[] byteInterCert = Base64.getDecoder().decode(intermediateCert);
ByteArrayInputStream byteB = new ByteArrayInputStream(byteInterCert);
X509Certificate cert2 = (X509Certificate) cf.generateCertificate(byteB);
byte[] byteCACert = Base64.getDecoder().decode(cacert);
ByteArrayInputStream byteC = new ByteArrayInputStream(byteCACert);
X509Certificate cert3 = (X509Certificate) cf.generateCertificate(byteC);
byte[] byteOCSPCert = Base64.getDecoder().decode(oscpCert);
ByteArrayInputStream byteOCSP = new ByteArrayInputStream(byteOCSPCert);
X509Certificate cert4 = (X509Certificate) cf.generateCertificate(byteOCSP);
// read the cacerts keystore to check signature
System.out.println("Loading cacerts...");
KeyStore cacerts = KeyStore.getInstance(KeyStore.getDefaultType());
cacerts.load(new FileInputStream(cacertsFile), cacertsPassword.toCharArray());
CertPathValidator cpv = CertPathValidator.getInstance("PKIX");
PKIXRevocationChecker rc = (PKIXRevocationChecker) cpv.getRevocationChecker();
rc.setOptions(EnumSet.of(PKIXRevocationChecker.Option.NO_FALLBACK));
rc.setOcspResponder(new URI(responderUrl));
rc.setOcspResponderCert(cert4);
// check the certpath with PKIX
List certs = new ArrayList();
certs.add(cert1);
certs.add(cert2);
certs.add(cert3);
CertPath certPath = cf.generateCertPath(certs);
PKIXParameters params = new PKIXParameters(cacerts);
params.addCertPathChecker(rc);
params.setRevocationEnabled(true);
TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
Calendar cal = Calendar.getInstance(TimeZone.getDefault());
Date dateGMT = cal.getTime();
params.setDate(dateGMT);
System.out.println("Performing PKIX validation...");
CertPathValidatorResult cpvResult = cpv.validate(certPath, params);
System.out.println("Result: OK");
return cpvResult.toString();
}catch(Exception ex){
Exception e = ex;
return e.toString();
}
}
Входные данные этой функции - Base64 каждого сертификата, затем я строю certPath из них. Я тестировал params.setDate (date), дата которого как в GTM +0, так и в текущем времени системы, выдается одно и то же исключение. И администратор респондента OCSP сказал мне, что он не получил от меня сообщения (возможно, нет данных, которые я отправил респонденту OCSP) . Исключение составляет throw:
java.security.cert.CertPathValidatorException: java.io.IOException: Response is unreliable: its validity interval is out-of-date; internal cause is:
java.io.IOException: Response is unreliable: its validity interval is out-of-date
Обновлено 18 марта 03:56:27 2020 GMT : Я проверил с помощью openssl (до этого я конвертировал сертификаты в pem), это хорошо:
bash-4.4$ openssl ocsp -issuer agriInterCert.pem -cert agriCert.pem -text -url http://pki-ocsp-internal.agribank.com.vn
OCSP Request Data:
Version: 1 (0x0)
Requestor List:
Certificate ID:
Hash Algorithm: sha1
Issuer Name Hash: 87FC06947984DCC39513397F1CC301D0AE8FCCBE
Issuer Key Hash: 17074621265A5C673887A20ADF0D4FB1718FDF40
Serial Number: 4710D4000A1B41596298182E9A9EAB4F
Request Extensions:
OCSP Nonce:
0410E565D8D4C105417EE39213BAD83D741B
OCSP Response Data:
OCSP Response Status: successful (0x0)
Response Type: Basic OCSP Response
Version: 1 (0x0)
Responder Id: C = VN, O = Agribank, CN = Agribank MPKI Internal OCSP Responder - 1024
Produced At: Mar 18 00:56:27 2020 GMT
Responses:
Certificate ID:
Hash Algorithm: sha1
Issuer Name Hash: 87FC06947984DCC39513397F1CC301D0AE8FCCBE
Issuer Key Hash: 17074621265A5C673887A20ADF0D4FB1718FDF40
Serial Number: 4710D4000A1B41596298182E9A9EAB4F
Cert Status: good
This Update: Mar 18 00:56:27 2020 GMT
Response Extensions:
OCSP Nonce:
0410E565D8D4C105417EE39213BAD83D741B
Signature Algorithm: sha1WithRSAEncryption
73:13:ce:b6:cb:6a:14:6a:f5:21:fa:06:25:51:44:77:d5:36:
0d:31:d8:00:b3:21:ea:d6:bf:bd:d3:80:7b:f4:40:12:d7:03:
86:4e:a6:fb:00:0f:52:2a:e5:70:ec:3a:4c:6d:78:f5:d0:d1:
3d:f5:da:d7:47:bf:09:2e:a6:86:bc:cb:84:b0:37:d0:b2:45:
23:26:06:c0:33:50:7d:a4:ef:4e:78:83:1a:17:01:21:3d:2e:
9f:77:bc:57:21:ab:d4:05:44:a8:67:20:72:e2:0f:a5:18:7a:
2c:9a:68:b0:12:e8:5e:62:b0:bb:83:6c:68:de:4f:86:cb:78:
4e:48
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
4e:41:53:27:34:69:c6:05:28:d1:49:a4:03:39:ea:03
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=VN, O=Agribank, CN=Agribank MPKI Internal CA
Validity
Not Before: Sep 6 00:00:00 2010 GMT
Not After : Sep 5 23:59:59 2048 GMT
Subject: C=VN, O=Agribank, CN=Agribank MPKI Internal OCSP Responder - 1024
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (1024 bit)
Modulus:
00:c1:d6:b1:39:33:21:d9:d2:92:58:2f:2b:5d:27:
cd:1c:26:0f:d4:54:b2:20:43:89:6c:64:8e:97:40:
49:48:19:89:1c:50:41:8b:1b:0d:95:61:3d:ab:02:
1c:cc:ef:6e:c3:05:38:37:23:05:e3:f3:0a:5b:59:
95:7c:bc:11:e1:c5:73:d3:98:e3:bf:d7:38:4c:65:
5b:9b:c6:12:db:8c:2d:f6:c0:d3:7b:49:57:cb:bb:
10:19:dd:1f:fc:b0:e8:95:76:b3:47:6b:20:52:c9:
a7:d0:5e:f9:f2:2a:d2:65:4e:07:91:f2:37:be:0a:
3e:28:a1:33:d6:a0:30:dd:29
Exponent: 65537 (0x10001)
X509v3 extensions:
OCSP No Check:
X509v3 Subject Alternative Name:
DirName:/CN=AgribankOnline-1024-1
X509v3 Basic Constraints:
CA:FALSE
X509v3 Extended Key Usage:
OCSP Signing
X509v3 Key Usage: critical
Digital Signature
X509v3 Subject Key Identifier:
2F:B9:5A:6A:CC:EC:BD:87:04:F0:80:A5:C6:06:BC:F5:C3:A7:5D:36
Signature Algorithm: sha1WithRSAEncryption
39:d1:a6:b1:15:9d:54:35:e8:14:24:86:98:8b:aa:f2:e1:82:
e6:ac:bb:1d:8b:d7:e0:d4:9a:cd:fd:fb:fa:05:97:e8:65:9b:
d9:28:48:fc:e4:02:f2:18:39:84:6b:4c:20:9f:a3:76:e0:31:
e5:6d:cb:44:4a:8e:75:fa:78:ea:5c:f0:b2:fd:d2:eb:4f:de:
af:69:ac:31:dd:1a:04:dc:f6:da:fd:9a:55:e9:a5:7d:4d:8f:
99:91:20:a9:ac:67:da:4b:f7:9e:f5:91:ef:a5:f6:7c:aa:43:
04:69:9b:6c:c2:92:13:39:b1:1f:2c:84:6f:28:d6:a3:c0:98:
21:c7:c5:99:47:2e:43:69:cc:97:6d:73:5f:70:8c:03:b0:16:
63:35:1b:11:d1:33:07:8a:5a:f8:d6:27:c2:fd:df:24:25:c8:
d6:ce:a5:2c:b6:ce:3d:dc:d6:11:9f:20:82:c9:00:ae:c3:c6:
df:0c:51:10:4a:e8:fe:97:43:d6:53:94:db:c4:1e:75:1b:b3:
72:ea:55:d8:bd:f1:7c:ed:19:dc:0d:d8:ad:ae:87:7d:8e:35:
1e:b5:04:03:10:3a:8c:22:c3:86:6a:67:f7:07:08:3f:8f:2f:
cd:94:9b:f2:c9:59:bb:da:b7:4a:2b:f2:b4:92:8a:0f:f5:60:
21:70:0d:84
-----BEGIN CERTIFICATE-----
MIIDNDCCAhygAwIBAgIQTkFTJzRpxgUo0UmkAznqAzANBgkqhkiG9w0BAQUFADBE
MQswCQYDVQQGEwJWTjERMA8GA1UEChMIQWdyaWJhbmsxIjAgBgNVBAMTGUFncmli
YW5rIE1QS0kgSW50ZXJuYWwgQ0EwHhcNMTAwOTA2MDAwMDAwWhcNNDgwOTA1MjM1
OTU5WjBXMQswCQYDVQQGEwJWTjERMA8GA1UEChMIQWdyaWJhbmsxNTAzBgNVBAMT
LEFncmliYW5rIE1QS0kgSW50ZXJuYWwgT0NTUCBSZXNwb25kZXIgLSAxMDI0MIGf
MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDB1rE5MyHZ0pJYLytdJ80cJg/UVLIg
Q4lsZI6XQElIGYkcUEGLGw2VYT2rAhzM727DBTg3IwXj8wpbWZV8vBHhxXPTmOO/
1zhMZVubxhLbjC32wNN7SVfLuxAZ3R/8sOiVdrNHayBSyafQXvnyKtJlTgeR8je+
Cj4ooTPWoDDdKQIDAQABo4GSMIGPMA8GCSsGAQUFBzABBQQCBQAwLQYDVR0RBCYw
JKQiMCAxHjAcBgNVBAMTFUFncmliYW5rT25saW5lLTEwMjQtMTAJBgNVHRMEAjAA
MBMGA1UdJQQMMAoGCCsGAQUFBwMJMA4GA1UdDwEB/wQEAwIHgDAdBgNVHQ4EFgQU
L7laaszsvYcE8IClxga89cOnXTYwDQYJKoZIhvcNAQEFBQADggEBADnRprEVnVQ1
6BQkhpiLqvLhguasux2L1+DUms39+/oFl+hlm9koSPzkAvIYOYRrTCCfo3bgMeVt
y0RKjnX6eOpc8LL90utP3q9prDHdGgTc9tr9mlXppX1Nj5mRIKmsZ9pL9571ke+l
9nyqQwRpm2zCkhM5sR8shG8o1qPAmCHHxZlHLkNpzJdtc19wjAOwFmM1GxHRMweK
WvjWJ8L93yQlyNbOpSy2zj3c1hGfIILJAK7Dxt8MURBK6P6XQ9ZTlNvEHnUbs3Lq
Vdi98XztGdwN2K2uh32ONR61BAMQOowiw4ZqZ/cHCD+PL82Um/LJWbvat0or8rSS
ig/1YCFwDYQ=
-----END CERTIFICATE-----
Response Verify Failure
804401144:error:27069065:OCSP routines:OCSP_basic_verify:certificate verify error:ocsp_vfy.c:140:Verify error:unable to get local issuer certificate
agriCert.pem: good
This Update: Mar 18 00:56:27 2020 GMT
Так, как я могу решить эту проблему? Я действительно не знаю, где проблема, я передаю неправильные параметры или что-то? Или есть какой-то кеш, который я должен изменить?
Сертификаты:
cacert: https://drive.google.com/open?id=1SVYC6duUQNS4qLGTOkL3A4ZC5IAy9Ihv
промежуточный сертификат: https://drive.google.com/open?id=1iNQQXcfe_MG-DDZu9FTf5BbRU0ESbLLn
сертификат: https://drive.google.com/open?id=1RkKG0UJnK1lHD58BhzkULqm4q2IfDfx2
Im застрял в этом. Поэтому, пожалуйста, помогите мне выбраться из этого.
Спасибо вам всем.