Dobrý den,
protože už z těch různých informací od zákázníků, kolegů a různých popisů SSL 
protokolu začínám být zamotaný, tak jsem ještě hledal trochu víc z dá se mi, 
že tady:
http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#HowSSLWorks
v části SSL process, konkrétně:
     The client and server exchange information that allows them to agree on 
the same secret key. For example, with RSA, the client uses the server's 
public key, obtained from the public key certificate, to encrypt the secret 
key information. The client sends the encrypted secret key information to the 
server. Only the server can decrypt this message since the server's private 
key is required for this decryption.

vyvrací vaši myšlenku, respektive jestli to správně chápu, použijí se klíče z 
certifikátu například v RSA pro ustanovení symetrického session key, to by i 
souhlasilo s oním požadavkem. Avšak měl byste pravdu s tím že je třeba 
implementovat vlastní TrustManager

On Tuesday 04 of December 2007 12:57:18 Martin Kuba wrote:
> 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


Odpovedet emailem