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
--------------------------------------------------------------
smime.p7s
Description: S/MIME Cryptographic Signature
