कैसे लिखना है मैंने अपने एसएसएल क्लाइंट/सर्वर सिस्टम (कोई HTTP) सेट अप करने के लिए बहुत सी चीजें पढ़ी हैं।नेटटी एसएसएल: ट्रस्टमैनेजर
मैंने खुद को the secure chat example और the websocket ssl server example से प्रेरित किया।
public class SecureChatTrustManagerFactory extends TrustManagerFactorySpi {
private static final TrustManager DUMMY_TRUST_MANAGER = new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
@Override
public void checkClientTrusted(
X509Certificate[] chain, String authType) throws CertificateException {
// Always trust - it is an example.
// You should do something in the real world.
// You will reach here only if you enabled client certificate auth,
// as described in SecureChatSslContextFactory.
System.err.println(
"UNKNOWN CLIENT CERTIFICATE: " + chain[0].getSubjectDN());
}
@Override
public void checkServerTrusted(
X509Certificate[] chain, String authType) throws CertificateException {
// Always trust - it is an example.
// You should do something in the real world.
System.err.println(
"UNKNOWN SERVER CERTIFICATE: " + chain[0].getSubjectDN());
}
};
public static TrustManager[] getTrustManagers() {
return new TrustManager[] { DUMMY_TRUST_MANAGER };
}
@Override
protected TrustManager[] engineGetTrustManagers() {
return getTrustManagers();
}
@Override
protected void engineInit(KeyStore keystore) throws KeyStoreException {
// Unused
}
@Override
protected void engineInit(ManagerFactoryParameters managerFactoryParameters)
throws InvalidAlgorithmParameterException {
// Unused
}
}
कैसे आप इस वर्ग के ठीक से लागू करते हैं: पहले से ही मेरी cert.jks आदेश
keytool -genkey -alias app-keysize 2048 -validity 36500
-keyalg RSA -dname "CN=app"
-keypass mysecret-storepass mysecret
-keystore cert.jks
साथ फाइल सुरक्षित चैट उदाहरण में वहाँ इस वर्ग है बनाया?
और यह कोड (SecureChatSslContextFactory कक्षा में) में:
SSLContext serverContext = null;
SSLContext clientContext = null;
try {
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(SecureChatKeyStore.asInputStream(),
SecureChatKeyStore.getKeyStorePassword());
// Set up key manager factory to use our key store
KeyManagerFactory kmf = KeyManagerFactory.getInstance(algorithm);
kmf.init(ks, SecureChatKeyStore.getCertificatePassword());
// Initialize the SSLContext to work with our key managers.
serverContext = SSLContext.getInstance(PROTOCOL);
serverContext.init(kmf.getKeyManagers(), null, null);
} catch (Exception e) {
throw new Error(
"Failed to initialize the server-side SSLContext", e);
}
try {
clientContext = SSLContext.getInstance(PROTOCOL);
clientContext.init(null, SecureChatTrustManagerFactory.getTrustManagers(), null);
} catch (Exception e) {
throw new Error(
"Failed to initialize the client-side SSLContext", e);
}
क्यों वे लाइन serverContext.init(kmf.getKeyManagers(), null, null);
में null
बजाय tmf.getTrustManagers()
रख सकता हूं?
अभी भी कुछ काम करने का प्रबंधन नहीं किया गया है ... मुझे नहीं लगता कि मेरे अपने ट्रस्टमैनेजर को कैसे कार्यान्वित करें फैक्टरी – Nanocom
अपने स्वयं के टीएमएफ को लागू न करें, मौजूदा का उपयोग करें। – Bruno
क्षमा करें, मेरा मतलब है कि मैंने अपने स्वयं के SecureChatSslContextFactory को लागू नहीं किया है – Nanocom