Pírko, Jiří Mikulášek napsal(a):
> Hezký den,
> na našeho zákazníka jsou kladeny požadavky (dané národním bezpečnostním 
> úřadem) na zajištění minimálně 2048-bitového klíče při algoritmu pro výměnu 
> klíčů během SSL handshake (algorithm and key negotiation). Ať pátrám jak 
> pátrám nenacházím možnost jak toto v JSSE ovlinit.
> 
> Mohl by mě prosím někdo nasměrovat?

Abychom si rozuměli - při SSL handshake se dohodne *symetrická
šifra*, kde délky klíče bývají kolem 50 až 256 bitů. Při
handshake si strany vymění certifikáty, v nichž jsou
veřejné klíče pro *asymetrickou šifru* a ty bývají
délky 1024 nebo 2048 bitů.

Z délky klíče tedy odhaduji, že máte na mysli délku klíče
v certifikátu. Tu ověříte snadno vlastní implementací
javax.net.ssl.X509TrustManager, tj. zhruba:

    static class MujX509TrustManager implements X509TrustManager {
        public X509Certificate[] getAcceptedIssuers() {
            throw new RuntimeException("not implemented");
        }

        public void checkClientTrusted(X509Certificate[] certs, String 
authType) {
            throw new RuntimeException("not implemented");
        }

        public void checkServerTrusted(X509Certificate[] certs, String 
authType) throws CertificateException {
            PublicKey publicKey = certs[0].getPublicKey();
            if (publicKey.getAlgorithm().equals("RSA")) {
                RSAPublicKey rsa = (RSAPublicKey) publicKey;
                if (rsa.getModulus().bitLength() < 2048) throw new 
CertificateException("RSA key too short");
            }  else if (publicKey.getAlgorithm().equals("DSA")) {
                DSAPublicKey dsa = (DSAPublicKey) publicKey;
                if(dsa.getY().bitLength() < 2048) throw new 
CertificateException("DSA key too short");
            } else {
                throw new CertificateException(publicKey.getAlgorithm()+" key 
not known");
            }
        }
    }

a nainstalovat:

TrustManager[] moje = new TrustManager[]{new MujX509TrustManager()};
SSLContext sctx = SSLContext.getInstance("SSL");
sctx.init(null, moje, null);
SSLSocketFactory factory = sctx.getSocketFactory();

Ten kód výše jenom kontroluje počet bitů klíče, neoveřuje certifikát,
takže ho budete muset upravit. A je to jenom pro klienta ověřujícího server.
Pro server ověřující klienta musíte udělat totéž v metodě checkClientTrusted().


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