>Java >java지도 시간 >Java SSL 연결에서 'DH 키 쌍을 생성할 수 없습니다' 예외를 해결하는 방법은 무엇입니까?

Java SSL 연결에서 'DH 키 쌍을 생성할 수 없습니다' 예외를 해결하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-06 10:00:27661검색

How to Fix the

'DH 키 쌍을 생성할 수 없습니다' 예외 문제 해결

특정 IRC 서버(특히 Aperture.esper.net)와 SSL 연결을 시도할 때: 6697), Java에서 "java.lang.RuntimeException: DH 키 쌍을 생성할 수 없습니다." 예외가 발생할 수 있습니다. 후속 "java.security.InvalidAlgorithmParameterException: 소수 크기는 64의 배수여야 하며 범위는 512에서 1024(포함)까지만 가능합니다.".

원인:

이 예외는 Java가 DH 키 쌍에 대해 허용하는 기본 최대 소수 크기(1024비트)에서 발생합니다. 그러나 SSL 연결을 시작하는 서버(이 경우,perture.esper.net)는 더 큰 소수 크기로 DH 키 쌍을 협상하려고 시도할 수 있습니다.

해결 방법:

1. BouncyCastle의 JCE 구현 사용:

JDK-6521495 버그 보고서에서 제안된 대로 BouncyCastle JCE 구현을 활용하여 기본 Java 구현을 대체할 수 있습니다. 이 대체 구현은 더 큰 DH 키 쌍 크기를 지원합니다.

2. Java 버전 업그레이드:

이 문제는 최신 Java 버전에서 해결되었습니다. 최대 소수 크기 제한은 JDK 7044060에서 2048비트로 늘어났으며 JDK 8072452에서는 완전히 제거되었습니다(2048비트를 초과하는 크기 허용). Java 9 이상으로 업그레이드하면 문제가 해결됩니다.

예( 사용 BouncyCastle):

Security.addProvider(new BouncyCastleProvider());

SSLContext sslContext = SSLContext.getInstance("SSL", "BC");
sslContext.init(null, trustAllCerts, new SecureRandom());
s = (SSLSocket)sslContext.getSocketFactory().createSocket();
s.connect(new InetSocketAddress(host, port), timeout);
s.setSoTimeout(0);
((SSLSocket)s).startHandshake();

추가 참고 사항:

문제의 서버인 Aperture.esper.net은 표준 관점에서 잘못 구성된 것으로 보입니다. , 위에 설명된 해결 방법을 사용하면 Java 애플리케이션이 SSL 세션을 성공적으로 연결하고 설정할 수 있습니다.

위 내용은 Java SSL 연결에서 'DH 키 쌍을 생성할 수 없습니다' 예외를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.