ServerSocket 在转换为 SSLSocket 时不接受(空指针异常)



我一直在尝试将我在使用套接字在Java中创建的客户端/服务器模型转换为SSL。生成包含服务器的根文件和中间文件的 PKCS12 文件后,我使用 System.setProperty 将客户机和服务器文件中的信任和密钥库更改为 PKCS 文件。我真的不确定这是否是你的本意。我还对我的套接字进行了更改,使用 SSLSocketFactory 创建必要的套接字。

这是下面的代码。 客户:

`public class Client 
{
private SSLSocket client_socket;
private DataOutputStream output_stream;
private FileReader reader;
private BufferedReader buffer_reader;
public Client(String address, int port)
{
System.setProperty("javax.net.ssl.keyStore", "wa.p12");
System.setProperty("javax.net.ssl.keyStorePassword", "namihana");
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
System.setProperty("javax.net.ssl.trustStore", "wa.p12");
System.setProperty("javax.net.ssl.trustStorePassword", "namihana");
System.setProperty("javax.net.ssl.TrustStoreType", "PKCS12");
//  System.setProperty("javax.net.ssl.trustStoreType", "PKCS12");
Security.addProvider(new Provider());
try
{
SSLSocketFactory ssf =  (SSLSocketFactory) SSLSocketFactory.getDefault();
client_socket = (SSLSocket) ssf.createSocket("127.0.0.1", 8072);
client_socket.startHandshake();
public class Server
{
public Socket socket_2;
public SSLServerSocket server_socket;
public InputStreamReader input_stream;
private BufferedReader buffer_reader;
private DataOutputStream output_sender;
private PrintWriter output_writer; 
private boolean result;
private char[] multichoice_answers;

服务器:

public Server(int port)
{
System.setProperty("javax.net.ssl.keyStore", "wa.p12");
System.setProperty("javax.net.ssl.keyStorePassword", "namihana");
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
System.setProperty("javax.net.ssl.trustStore", "wa.p12");
System.setProperty("javax.net.ssl.trustStorePassword", "namihana");
System.setProperty("javax.net.ssl.TrustStoreType", "PKCS12");
multichoice_answers = new char[30];
multichoice_answers[0] = 'A';
multichoice_answers[1] = 'A';
multichoice_answers[2] = 'D'; 
multichoice_answers[3] = 'C';
multichoice_answers[4] = 'C';
multichoice_answers[5] = 'C';
multichoice_answers[6] = 'D';
multichoice_answers[7] = 'B';
multichoice_answers[8] = 'D';
multichoice_answers[9] = 'B';
multichoice_answers[10] = 'C';
multichoice_answers[11] = 'D';
multichoice_answers[12] = 'A';
multichoice_answers[13] = 'D';
multichoice_answers[14] = 'C';
try
{
SSLServerSocketFactory ssf =  (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket server_socket =  (SSLServerSocket) ssf.createServerSocket(port); 
System.out.println("Server_socket made");
Security.addProvider(new Provider()); 
//server_socket.setSoTimeout(100000); 
}
catch(Exception e)
{
e.printStackTrace();
}
}

public void receive()
{
try
{
System.out.println("Server connected2");   
socket_2 =   server_socket.accept();

try块中有一个隐藏类成员的局部ServerSocket变量。

最新更新