Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Error in OCSP Validatator 
:(
    Опции темы
DmTsarev
Дата 7.10.2008, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 11.7.2007

Репутация: нет
Всего: нет



Здравствуйте. Проблема в следующем:
Взял код из примеров для Ejbca, добавил чтение сертификатов и получил:
Код


import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.security.Security;
import java.security.cert.CertPath;
import java.security.cert.CertPathValidator;
import java.security.cert.CertPathValidatorException;
import java.security.cert.CertStore;
import java.security.cert.CertStoreParameters;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
import java.security.cert.CollectionCertStoreParameters;
import java.security.cert.PKIXCertPathValidatorResult;
import java.security.cert.X509Certificate;
import java.security.cert.PKIXParameters;
import java.security.cert.TrustAnchor;
import java.util.HashSet;
import java.util.Set;
import java.util.Vector;

/**
 * Check the revocation status of a public key certificate using OCSP.
 */
public class ValidateCertUseOCSP {

    /*
     * Filename that contains the root CA cert of the OCSP server's cert.
     */
    private static final String ROOT_CA_CERT = "AdminCA.pem";

    /*
     * Filename that contains the OCSP server's cert.
     */
    private static final String OCSP_SERVER_CERT = "OCSPServer.pem";

    /**
     * Checks the revocation status of a public key certificate using OCSP.
     *
     * Usage:  java ValidateCert <cert-file> [<OCSP-server>]
     *     <cert-file> is the filename of the certificate to be checked.
     *            The certificate must be in PEM format.
     *     <OCSP-server> is the URL of the OCSP server to use.
     *            If not supplied then the certificate must identify an OCSP
     *            server by means of its AuthorityInfoAccess extension.
     *            If supplied then it overrides any URL which may be present
     *            in the certificate's AuthorityInfoAccess extension.
     *
     * Example:  java /
     *             -Dhttp.proxyHost=proxy.example.net /
     *             -Dhttp.proxyPort=8080 /
     *             ValidateCert /
     *             mycert.pem /
     *             http://ocsp.openvalidation.org:80
     */
    public static void main(String[] args) {
        try {

            
           // args[0] = certstore file name
           // args[1] = OCSP responder url

            CertPath cp = null;
            Vector certs = new Vector();
            URI ocspServer = null;

            if (args.length == 0 || args.length > 2) {
                System.out.println(
                        "Usage: java ValidateCert <cert-file> [<OCSP-server>]");
                System.exit(-1);
            }

            // load the cert to be checked
            for (Certificate cert : getCertFromFile(args[0])) {

                X509Certificate crt = (X509Certificate) cert;
                System.out.println(crt.getNotAfter());
                System.out.println(crt.getNotBefore());
                System.out.println("");
                certs.add(cert);
            }


            // handle location of OCSP server
            if (args.length == 2) {
                ocspServer = new URI(args[1]);
                System.out.println("Using the OCSP server at: " + args[1]);
                System.out.println("to check the revocation status of: " +
                        certs.elementAt(0));
                System.out.println();
            } else {
                System.out.println("Using the OCSP server specified in the " +
                        "cert to check the revocation status of: " +
                        certs.elementAt(0));
                System.out.println();
            }

            // init cert path
            CertificateFactory cf = CertificateFactory.getInstance("X509");
            cp = (CertPath) cf.generateCertPath(certs);

            // load the root CA cert for the OCSP server cert
            X509Certificate rootCACert = (X509Certificate) getCertFromFile(ROOT_CA_CERT)[0];

            // init trusted certs
            TrustAnchor ta = new TrustAnchor(rootCACert, null);
            Set trustedCertsSet = new HashSet();
            trustedCertsSet.add(ta);

            // init cert store
            Set certSet = new HashSet();
            X509Certificate ocspCert = (X509Certificate) getCertFromFile(OCSP_SERVER_CERT)[0];
            certSet.add(ocspCert);
            CertStoreParameters storeParams =
                    new CollectionCertStoreParameters(certSet);
            CertStore store = CertStore.getInstance("Collection", storeParams);

            // init PKIX parameters
            PKIXParameters params = null;
            params = new PKIXParameters(trustedCertsSet);
            params.setRevocationEnabled(true);
            // params.addCertStore(null);
            params.addCertStore(store);

            // enable OCSP
            Security.setProperty("ocsp.enable", "true");
            if (ocspServer != null) {
                Security.setProperty("ocsp.responderURL", args[1]);
                Security.setProperty("ocsp.responderCertSubjectName",
                        ocspCert.getSubjectX500Principal().getName());
            }

            // perform validation
            CertPathValidator cpv = CertPathValidator.getInstance("PKIX");
            PKIXCertPathValidatorResult cpv_result =
                    (PKIXCertPathValidatorResult) cpv.validate(cp, params);
            X509Certificate trustedCert = (X509Certificate) cpv_result.getTrustAnchor().getTrustedCert();

            if (trustedCert == null) {
                System.out.println("Trsuted Cert = NULL");
            } else {
                System.out.println("Trusted CA DN = " +
                        trustedCert.getSubjectDN());
            }

        } catch (CertPathValidatorException e) {
            e.printStackTrace();
            System.exit(1);

        } catch (Exception e) {
            e.printStackTrace();
            System.exit(-1);
        }
        System.out.println("CERTIFICATE VALIDATION SUCCEEDED");
        System.exit(0);
    }

    /*
     * Read a certificate from the specified filepath.
     */
    private static Certificate[] getCertFromFile(String path) {
        Certificate cert[] = null;
        try {

            File certFile = new File(path);
            if (!certFile.canRead()) {
                throw new IOException(" File " + certFile.toString() +
                        " is unreadable");
            }
            cert = KeyStoreUtil.getCertificateFromFile(
                    path, "password", "Certificate Entry Name");

        } catch (Exception e) {
            System.out.println("Can't construct X509 Certificate. " +
                    e.getMessage());
        }
        return cert;
    }
}



Доходит до получения PKIXCertPathValidatorResult и падает:

Код

java.security.cert.CertPathValidatorException: java.io.IOException: Response is unreliable: its validity interval is out-of-date
        at sun.security.provider.certpath.PKIXMasterCertPathValidator.validate(PKIXMasterCertPathValidator.java:139)
        at sun.security.provider.certpath.PKIXCertPathValidator.doValidate(PKIXCertPathValidator.java:316)
        at sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(PKIXCertPathValidator.java:178)
        at java.security.cert.CertPathValidator.validate(CertPathValidator.java:250)
        at pmx.ValidateCertUseOCSP.main(ValidateCertUseOCSP.java:138)
Caused by: java.io.IOException: Response is unreliable: its validity interval is out-of-date
        at sun.security.provider.certpath.OCSPResponse$SingleResponse.<init>(OCSPResponse.java:541)
        at sun.security.provider.certpath.OCSPResponse$SingleResponse.<init>(OCSPResponse.java:471)
        at sun.security.provider.certpath.OCSPResponse.<init>(OCSPResponse.java:258)
        at sun.security.provider.certpath.OCSPChecker.check(OCSPChecker.java:346)
        at sun.security.provider.certpath.PKIXMasterCertPathValidator.validate(PKIXMasterCertPathValidator.java:117)
        ... 4 more


Читаю на SUNовском форуме, что дело может быть в простроченности сертификата и перевыпускаю все 3 сертификата.
Ничего не изменилось...
Лезу в лог и вижу, что CertificateAuthority(Ejbca) шлет нормальный ответ со статусом сертификата GOOD. 

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

Заранее спасибо. 


PM MAIL   Вверх
ivan_h
Дата 14.11.2011, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 4.8.2007

Репутация: нет
Всего: нет



Такая ситуация может возникать из-за рассинхронизации времени на сервере OCSP и станции, от которой приходит запрос на OCSP. Баг: Ссылка на баг, где просят выводить более подробную информацию об ошибке

Это сообщение отредактировал(а) ivan_h - 14.11.2011, 08:36
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0428 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.