在Java中使用JSSE和TLS.我在服务器和客户端之间创建了一个安全套接字.在最终安全地连接套接字之后,我仍然有一个关于我现有代码安全性的基本问题.我按照教程中的说明进行操作,有时JavaDoc中的文档非常精确,但有点模糊,除非你说的是Swaheli方言的术语....
我现在已经在C++中进行了一段时间的网络编程.过渡到Java很容易.然而,最近我发现使交通安全是明智的.这是说:
我想以与Web浏览器创建安全套接字相同的方式创建安全套接字,因此双向流量都是加密的.客户端可以看到他们从服务器发送的个人帐户信息(如果被截获则非常糟糕),并且客户端可以安全地将他们的用户名和密码发送到服务器(如果被截获也非常糟糕).
我知道公钥加密的工作原理,但仅对公钥加密有副作用.您将公钥发送到客户端,客户端使用公钥加密,并将数据发送到服务器,只有服务器可以解密.根据我的理解,服务器使用私钥来加密发往客户端的消息,并且需要添加另一层安全性以防止任何拥有公钥的人能够解密它.
客户类:
KeyStore keyStore;
TrustManagerFactory tmf;
KeyManagerFactory kmf;
SSLContext sslContext;
SecureRandom secureRandom = new SecureRandom();
secureRandom.nextInt();
keyStore = KeyStore.getInstance("JKS");
keyStore.load(this.getClass().getClassLoader().getResourceAsStream("server.public"),"public".toCharArray());
tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(keyStore);
kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(keyStore, "public".toCharArray());
sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), secureRandom);
SSLSocketFactory sslsocketfactory = sslContext.getSocketFactory();
SSLSocket sslsocket = (SSLSocket)sslsocketfactory.createSocket("localhost", 9999);
Run Code Online (Sandbox Code Playgroud)
服务器类:
String passphrase = "secret"
KeyStore keyStore;
TrustManagerFactory tmf;
KeyManagerFactory kmf;
SSLContext sslContext;
SecureRandom secureRandom = new SecureRandom();
secureRandom.nextInt();
keyStore = KeyStore.getInstance("JKS");
keyStore.load(this.getClass().getClassLoader().getResourceAsStream("server.private"),passphrase.toCharArray());
tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(keyStore);
kmf = KeyManagerFactory.getInstance("SunX509"); …Run Code Online (Sandbox Code Playgroud)