그래서, 내가 그에 연결해야하는 서버가 이전, 사용되지 않는 인증서를 사용하고이 문제로되지 않는 SSL 암호화 방식 군에 대한 지원을 추가하는 방법. Apache HttpClient
으로 연결을 시도하면 SSLException: Received fatal alert: close_notify
이됩니다. 클라이언트 자체는 다른 서버에서 재사용 할 필요는 없지만 빌더 코드는이를 수행 할 수 있어야합니다.
내보다 적게보다는 이상적인 해결 방법은
나는 대체 TLS 프로토콜을 설정하여이 문제를 해결했다,하지만 또 다른 요청을 추가하기 때문에이 적합하지 않습니다. 이이보다 더 우아한 방법이어야합니다
URL url = new URL("https://...");
SSLContextBuilder sslContextBuilder = SSLContexts.custom();
try {
url.openConnection().connect();
} catch (SSLException e) {
sslContextBuilder.useProtocol("TLSv1");
}
나는 또한 내가 또한 사용자 정의 SSLConnectionSocketFactory
을 만드는 시도
을 시도했지만 TLSv1.2
가 옵션으로 포함 된 경우 아파치는 TLSv1
을 무시합니다. 본질적으로
SSLConnectionSocketFactory sf = new SSLConnectionSocketFactory(
SSLContext.getDefault(),
new String[] { "TLSv1.2", "TLSv1" },
null,
SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
반사
, 나는 기본 문제는 원격 서버가 사용되지 않는 암호화 제품군을 사용하는 것으로 가정합니다. SSLConnectionSocketFactory
으로 지원하고자하는 모든 암호 스위트를 전달할 수는 있지만, 많은 것들이 있습니다. 그리고 Sun은 개인 클래스 뒤에 전체 목록을 숨겨 둡니다.
가 해당 서버를 나열 할 수 있습니까? 예 : https://ex.qq.com/. ssllabs.com을 사용하여 지원하는 SSL 버전 및 암호 그룹을 확인할 수도 있습니다. – auntyellow
당신의 마음을 확인하십시오. 더 이상 사용되지 않는 인증서 또는 사용되지 않는 암호 제품군입니까? – EJP