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

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

Patricia Arquette
풀어 주다: 2024-12-06 10:00:27
원래의
671명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿