//服务端代码如下 参考 https://blog.csdn.net/spdxspdx/article/details/84230574
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSocket;
public class SSLServer {
public static void startSSLServer() throws IOException, java.security.cert.CertificateException {
int port = 8089;// 监听端口
String keyFile = "D:\\xxxx\\shfqkeystore.jks";// 密钥库文件
String keyFilePass = "123456";// 密钥库的密码
String keyPass = "123456";// 密钥别名的密码
SSLServerSocket sslsocket = null;// 安全连接套接字
KeyStore ks;// 密钥库
KeyManagerFactory kmf;// 密钥管理工厂
SSLContext sslc = null;// 安全连接方式
// 初始化安全连接的密钥
try {
ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(keyFile), keyFilePass.toCharArray());
kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, keyPass.toCharArray());
sslc = SSLContext.getInstance("SSLv3");
sslc.init(kmf.getKeyManagers(), null, null);
} catch (KeyManagementException ex) {
ex.printStackTrace();
} catch (UnrecoverableKeyException ex) {
ex.printStackTrace();
} catch (KeyStoreException ex) {
ex.printStackTrace();
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
}
// 用安全连接的工厂来创建安全连接套接字
SSLServerSocketFactory sslssf = sslc.getServerSocketFactory();
sslsocket = (SSLServerSocket) sslssf.createServerSocket(port);// 创建并进入监听
System.out.println("Listening...");
while (true) {
SSLSocket ssocket = (SSLSocket) sslsocket.accept();// 接受客户端的连接
System.out.println("Server Connection .....");
// 以下代码同socket通讯实例中的代码
BufferedReader socketIn = new BufferedReader(new InputStreamReader(ssocket.getInputStream()));
DataOutputStream socketOut = new DataOutputStream(ssocket.getOutputStream());
String s = null;
System.out.println("Please wait client 's message..");
s = socketIn.readLine();
System.out.println("Client Message: " + s);
s = "接收成功";
System.out.print("Server Message: " + s);
socketOut.write(s.getBytes());
ssocket.close();
}
}
public static void main(String[] args) {
try {
startSSLServer();
} catch (Exception e) {
e.printStackTrace();
}
}
}