Java 및 네트워킹을 배우고 약 9 시간 동안 멈추었 기 때문에 개인 프로젝트 중 하나에 HTTPS 웹 서버를 구축하려고하는데 도움을 요청하고 있습니다. , 실제로 입력 스트림에서 읽으려고 할 때마다Java SSL 소켓 웹 서버 잘못된 인증서
문제는 내 HTTPS 서버 오류 ": 수신 치명적인 경고 bad_certificatejavax.net.ssl.SSLHandshakeException"로 충돌 것입니다. 나는 여러 시간 동안 인터넷 검색을 시도했지만 키를 생성하는 여러 가지 방법을 시도하고 모두 시도했지만 다른 오류 메시지가 계속 표시되었습니다.
내가하는 일은 내 컴퓨터에서 Java 응용 프로그램을 실행하고 포트 443에 바인드 한 다음 연결하기 위해 FireFox를 연 다음 받아 들인 소켓 입력에서 읽으려고 할 때 디버깅에서 엽니 다. 스트림 (코드에 명시된 위치)에서 위의 치명적인 오류로 인해 충돌합니다. 모든 것이 제대로 작동했다면 Firefox 인증서에 표시된 SSL 경고를 무시하고 페이지를 계속 진행할 수있는 기회가 Firefox에 부여되어야합니다. 그러나 치명적인 오류로 인해 내 Java SSL 웹 서버.
나는 인증서 생성 방법 :
#GENERATE KEYS
keytool -genkeypair -alias plainserverkeys -keyalg RSA -dname "CN=Plain Server,OU=kl2217,O=kl2217org,L=Boston,ST=MA,C=US" -keypass password -keystore plainserver.jks -storepass password
keytool -genkeypair -alias plainclientkeys -keyalg RSA -dname "CN=Plain Client,OU=kl2217,O=kl2217org,L=Boston,ST=MA,C=US" -keypass password -keystore plainclient.jks -storepass password
#EXPORT SERVER CERT + IMPORT NEW KEYSTORE
keytool -exportcert -alias plainserverkeys -file serverpub.cer -keystore plainserver.jks -storepass password
keytool -importcert -keystore serverpub.jks -alias serverpub -file serverpub.cer -storepass password
#EXPORT CLIENT CERT + IMPORT NEW KEYSTORE
keytool -exportcert -alias plainclientkeys -file clientpub.cer -keystore plainclient.jks -storepass password
keytool -importcert -keystore clientpub.jks -alias clientpub -file clientpub.cer -storepass password
#EXPORT PLAIN CLIENT CERT + IMPORT TO MAIN JAVA KEYSTORE
keytool -export -alias plainclientkeys -keystore plainclient.jks -rfc -file plainclient.cert
keytool -import -trustcacerts -keystore /usr/java/jdk1.7.0_25/jre/lib/security/cacerts -storepass changeit -noprompt -alias mycert -file plainclient.cert
소스 코드 :
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.TrustManagerFactory;
public class Main
{
public static void main(String[] args)
{
SSLContext context;
KeyManagerFactory kmf;
KeyStore ks;
char[] storepass = "password".toCharArray();
char[] keypass = "password".toCharArray();
String storename = "plainserver.jks";
try
{
//KEY MANAGER
context = SSLContext.getInstance("TLS");
kmf = KeyManagerFactory.getInstance("SunX509");
FileInputStream fin = new FileInputStream(storename);
ks = KeyStore.getInstance("JKS");
ks.load(fin, storepass);
kmf.init(ks, keypass);
//TRUST MANAGER
KeyStore clientPub = KeyStore.getInstance("JKS");
clientPub.load(new FileInputStream("clientpub.jks"),"password".toCharArray());
TrustManagerFactory trustManager = TrustManagerFactory.getInstance("SunX509");
trustManager.init(clientPub);
//INIT SERVER STUFF
context.init(kmf.getKeyManagers(), trustManager.getTrustManagers(), null);
SSLServerSocketFactory ssf = context.getServerSocketFactory();
//ServerSocket ss = ssf.createServerSocket(443);
SSLServerSocket ss = (SSLServerSocket) ssf.createServerSocket(443);
while (true)
{
System.out.println("ACCEPT");
Socket s = ss.accept();
System.out.println("PROCESS! (1)");
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println("PROCESS! (2)");
String x = in.readLine(); //!!!!!PROGRAM WILL CRASH HERE!!!!
System.out.println("PROCESS! (3)");
System.out.println(x);
s.close();
}
}
catch (KeyStoreException | IOException | NoSuchAlgorithmException | KeyManagementException |
UnrecoverableKeyException | CertificateException e)
{
e.printStackTrace();
}
}
}
나는 오랫동안이 붙어 봤는데 알아 내기 위해 노력하고 싶습니다 왜 잘못되어 있고 왜. 나는 모든 것을 조사했고 인증서, 키 생성에 관한 약 15 개의 튜토리얼을 시험해 보았고 내 코드를 대체하여 다른 코드를 사용하여 내 문제의 원인인지 확인했습니다. 나는 여전히 자바를 배우고 있으며, 도움이 필요하다면 (코드 또는 기타) 도움을 줄 수있을 것입니다.
응답 한 사람이 내 의견을 삭제 한 사람에게 다시 올리시겠습니까? –
전체 스택 추적을 게시하십시오. – EJP