2013-10-10 3 views
3

자체 서명 된 서버 (현재 개발 중에 localhost에서 실행중인 ARX라는 타사 프로그램)에 다중 게시물을 작성해야하는 시스템을 작성 중입니다. 증명서.SSLHandshakeException : 인증서의 호스트 이름이 일치하지 않음

인증서를 찾으려고 시도했지만 세 가지 다른 jks 파일 만 찾을 수 있습니다. server.jks, servertrust.jksserverca.jks.

각 jks 파일에 System.setProperty("javax.net.ssl.trustStore", "Program Files\\<path>\\jksfile")을 사용하려고했습니다. 하나; 내가 할 때 다음과 같은 오류가 발생합니다 : 인증서의 호스트 이름이 일치하지 않습니다 : < localhost>! = < 9200416 arx sa 인증서>.

stackoverflow에서 비슷한 질문을 많이 읽었습니다.이 문제를 해결하는 방법에 대한 아이디어를 얻었지만 문제를 해결할 수 없었습니다.

제안 사항? 모든 도움은 대단히 감사하겠습니다.

+0

저는 보안 연결을 구현할 때 수행 한 모든 단계를 설명하는 질문을 작성했습니다. 'hostNameVerifier' 부분을 보시면 도움이 될 것입니다 : http://stackoverflow.com/questions/15544116/sslhandshakeexception-received-fatal-alert-handshake-failure-when-setting-ciph – Avi

답변

12

인증서 자체가 신뢰할 수있는 것으로 보이므로 javax.net.ssl.trustStore 설정이 작동했지만 호스트 이름이 일치하지 않습니다.

호스트 이름 일치는 클라이언트가 액세스하려는 호스트를 식별하는 방법에 따라 수행됩니다. https://localhost/에 액세스하려는 경우 localhost에 대한 인증서가 유효해야합니다. https://something-else.example에 액세스하려는 경우 localhostsomething-else.example이 동일한 컴퓨터 일지라도 인증서는 something-else.example에 대해 유효해야합니다.

인증서의 식별자는 주체 대체 이름 확장명이거나 주체 고유 이름의 일반 이름 (CN)에 있어야합니다.

여기에 인증서가 CN 만 있고이 CN이 "9200416 arx sa cert"인 것 같습니다.

원칙적으로 개발 컴퓨터에서 hosts 파일을 사용하여 해당 이름이 로컬 호스트를 가리키게하여 해당 문제를 해결할 수 있습니다. 그러나 그 이름에는 공백이 포함되어 있으므로 올바른 호스트 이름조차 갖고 있지 않습니다.

  1. 는 적절한 호스트 이름을 사용하도록 해당 응용 프로그램에 대한 인증서를 재 - 생성 (필요한 경우, 귀하의 hosts 파일을 적응) :

    당신은 몇 가지 옵션을 얻을. 이것은 설정되었을 때 실수 일 수 있습니다. 어쩌면 누군가가 공백으로 그 이름을 채웠을 것입니다. 예를 들어, OpenSSL은 때때로이 "Your Name"을 호출합니다.

  2. 잘못된 옵션은 호스트 이름 유효성 검사를 무시하도록 응용 프로그램을 변경하는 것입니다. 이는 MITM 공격에 대한 코드가 열려 있기 때문에 잘못된 옵션입니다. 물론 이것은 localhost에서 localhost까지 거의 문제가되지 않지만 코드에 그대로 남아 있습니다. 오류 (의도하지 않은 오류)가 발생하지 않도록하기 때문에 프로덕션 코드에서이를 제거하는 것이 잊어 버릴 수 있습니다. 개발 실천이 좋은 곳에서도 쉽게 놓칠 수 있습니다. 그것은 나쁜 선택입니다 (단지이 점을 강조하는 것입니다).

    이보다 약간 더 나은 변형은 인증서에있는 것으로 알고있는 이름을 찾는 사용자 지정 호스트 이름 확인자가 있어야한다는 것입니다.

+0

고맙습니다. 귀하의 솔루션을 적용하려고 시도합니다. 숫자 2가 나쁜 해결책이라고해도이 프로그램은 보안 컴퓨터 (또는 최대 3 개의 다른 컴퓨터)에서만 실행되며 나 자신 외에는 아무도 액세스 할 수 없으며 서버를 실행하는 경우와 동일합니다 ARX ​​프로그램 HostNameVerifier (http://stackoverflow.com/questions/6031258/java-ssl-how-to-disable-hostname-verification)를 재정의하고이를 수행하는 데 충분한 시작시에 --javaagent 매개 변수를 추가합니까? 다시 한번 대답 해 주셔서 감사합니다! – EvenLisle

관련 문제