Lukas Zapletal wrote:
> Dobry den,
> 
> jake mechanismy ma Java pro overovani retezcu certifikatu? Rekneme ze
> jsem podepsal dokument nejakym certifikatem a nyni bych potreboval
> korektne overit platnost podpisu timto certifikatem. Predevsim:
> 
> - zda je certifikat platny (casove)
> - projit cely retezec od ROOT autority az po konkretni (podpisovy)
> certifikat a overit platnost
> - nasledne zkontrolovat platnost vlastniho digitalniho podpisu (otisku)

Delejte to v opacnem poradi, tj. nejdriv overit korektnost digestu zpravy,
a pak platnost certifikatu.

Platnost certifikatu se overuje takhle (beru z jednoho sveho starsiho zdrojaku,
upravte si to):

import java.io.File;
import java.io.IOException;
import java.security.InvalidAlgorithmParameterException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.cert.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
/**
 * Keeps certificates of trusted Certification Authorities.
 *
 * @author Martin Kuba [EMAIL PROTECTED]
 */
public class TrustedCAs {

    /**
     * Instance of X509 certificate factory.
     */
    protected CertificateFactory certFact;
    /**
     * Instance of PKIX certificate path validator.
     */
    protected CertPathValidator certPathValidator;
    /**
     * Set of [EMAIL PROTECTED] java.security.cert.TrustAnchor TrustAnchor}s.
     */
    protected Set<TrustAnchor> cas = null;
    protected PKIXParameters params = null;
    static final String BOUNCYCASTLE = "BC";
    /**
     * Creates trusted CAs from supplied set of TrustAnchors.
     *
     * @see java.security.cert.TrustAnchor
     */
    public TrustedCAs(Set<TrustAnchor> cas) throws CertificateException, 
NoSuchAlgorithmException, NoSuchProviderException {
        this.cas = cas;
        //must use BC provider so that X509Certificates from SMIMESigned can be 
verified
        certFact = CertificateFactory.getInstance("X.509",BOUNCYCASTLE);
        certPathValidator = CertPathValidator.getInstance("PKIX",BOUNCYCASTLE);
    }
   /**
     * Validates a certificate chain.
     * Builds a CertPath from the chain and validates it.
     *
     * @return certificate of the matching CA
     */
    public X509Certificate validateCertChain(X509Certificate[] chain) throws 
CertPathValidatorException, CertificateException, 
InvalidAlgorithmParameterException {
        CertPath path = certFact.generateCertPath(Arrays.asList(chain));
        return validateCertPath(path).getTrustedCert();
    }
    /**
     * Validates a certificate path.
     *
     * @return matching CA
     */
    public TrustAnchor validateCertPath(CertPath path) throws 
CertPathValidatorException, InvalidAlgorithmParameterException {
        if (this.params == null) {
            this.params = new PKIXParameters(this.cas);
            this.params.setRevocationEnabled(false);
        }
        return ((PKIXCertPathValidatorResult) certPathValidator.validate(path, 
params)).getTrustAnchor();
    }
}

Pro overovani musite pouzivat stejny Security Provider, ktery vyrobil
certifikaty, coz ja jsem musel mit BouncyCastle, neb certifikaty
jsem bral z S/MIME podpisu z e-mailu. Ale staci parametr vynechat,
aby to vzalo default provider.

> A jeste bych mel jeden dotaz - kdyz musim dokument archivovat nekolik
> let, jak se potom resi overovani podpisu takoveho dokumentu, ktery byl
> podepsan jiz neplatnym -- tj expirovanym -- (ale v dobe podpisu
> platnym) certifikatem? Mam na mysli to, ze kdyz bych chtel treba po 10
> letech znovu overit, zda byl dokument opravdu spravne podepsan, tak
> nemam tu moznost.

To IMHO nejde. Cele PKI je delane na kratkodobe veci, protoze
podstatnou soucasti bezpecnosti certifikatu je, ze neuplynul
dostatecne dlouhy cas, aby ho nekdo zlomil silou.

Dodnes nechapu, jak si autori zakona o elektronickem podpisu
predstavuji, ze budou overovat treba el. podpis na kupni smlouve
na dum po dvaceti letech.

Makub
-- 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Supercomputing Center Brno             Martin Kuba
Institute of Computer Science    email: [EMAIL PROTECTED]
Masaryk University             http://www.ics.muni.cz/~makub/
Botanicka 68a, 60200 Brno, CZ     mobil: +420-603-533775
--------------------------------------------------------------

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Odpovedet emailem