Исключение устаревшего при проверке вызова OCSP в java - PullRequest
0 голосов
/ 18 марта 2020

Я использую 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

Так, как я могу решить эту проблему? Я действительно не знаю, где проблема, я передаю неправильные параметры или что-то? Или есть какой-то кеш, который я должен изменить?

Сертификаты:

  1. cacert: https://drive.google.com/open?id=1SVYC6duUQNS4qLGTOkL3A4ZC5IAy9Ihv

  2. промежуточный сертификат: https://drive.google.com/open?id=1iNQQXcfe_MG-DDZu9FTf5BbRU0ESbLLn

  3. сертификат: https://drive.google.com/open?id=1RkKG0UJnK1lHD58BhzkULqm4q2IfDfx2

Im застрял в этом. Поэтому, пожалуйста, помогите мне выбраться из этого.

Спасибо вам всем.

...