문제

KeyTool을 사용하여 서버 및 클라이언트 인증이있는 웹 서비스를 구현했습니다. 문제는 호스트 이름을 포함하지 않으면이 인증이 작동하지 않는다는 것입니다. 예를 들어:

keytool -genkey -alias myAlias -keyalg RSA -keypass myPassword -storepass myPassword -keystore my.keystore -dname "CN=myhost"

그러나 나는 필요하지 않으며 호스트 나 IP로 검증을 좋아하지 않습니다. 그것을 피하는 방법이 있습니까?

감사.

도움이 되었습니까?

해결책

SSL은 요구 사항의 일부로 인증서 CN이 연결하는 호스트 이름과 일치한다는 검증을 가지고 있습니다. CN이 일치하지 않으면 브라우저는 잘못된 호스트와 객체에 연결한다고 가정합니다.

이것에 대한 방법은 없습니다.

다른 팁

나는 다른 포스터에 동의합니다 : 당신이 SSL을 사용하고 있다면, 당신은 거의 확실합니다. 원하다 SSL 보안 기능 세트의 일부로 호스트 이름 확인.

즉, 사용중인 클라이언트에 따라이 문제에 대한 방법이있을 수 있습니다. 엔지니어는 테스트 환경, 디버깅, 프로토 타이핑 등을 위해 호스트 이름 검증을 우회 할 것입니다.

static {
    HttpsURLConnection.setDefaultHostnameVerifier( 
        new HostnameVerifier(){
            public boolean verify(String string,SSLSession ssls) {
            return true;
        }
    });
}

SSL/TLS를 사용하는 요점은 클라이언트가 올바른 서비스에 연결되어 있는지 확인하고 실제 서비스를 가장하려는 가짜 서비스가 아니라는 것입니다. (가상) 서버 인증서에 호스트 식별 정보가 포함되어 있지 않은 경우, 협상중인 서버가 올바른 사람 인 경우 클라이언트가 클라이언트입니다.

사실, 당신 검증이 필요합니다 DNS 주소에 의해 SSL 유효성 검사는 가치가 없기 때문에. (또는 적어도, 가능한 한 안전하지 않습니다.)

이론적으로 SSL/TLS 이외의 다른 수단으로 보안 된 채널을 통해 클라이언트/서버 통신을 수행 할 수 있다고 생각합니다. 그러나 Java의 보안 및 암호화 기술에 대한 진지한 전문 지식이 필요합니다.

표준 논리는 다음과 같습니다. 데이터를 보호 할 필요가 없다면 SSL을 사용하지 마십시오. 당신이 그것을 보호해야한다면, 당신은 어떤 호스트를 연결하고 있는지 알아야합니다. 중간에는 없어야합니다.

그러나 일부 내부 환경에서는 네트워크를 충분히 제어하고 걱정하지 않도록 구성 할 수 있습니다.

후자의 경우 솔루션은 사용중인 클라이언트 라이브러리에 따라 달라집니다. HTTP 클라이언트를 사용하는 경우 SSL 구성 안내서. 직접 구현할 필요가 없을 수도 있습니다. SecureProtocolSocketFactory 그리고 그냥 사용할 수 있습니다 easysslprotocolsocketfactory.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top