>  기사  >  데이터 베이스  >  Java를 사용하여 MySQL에 연결할 때 \"공개 키 검색이 허용되지 않습니다\" 오류가 발생하는 이유는 무엇입니까?

Java를 사용하여 MySQL에 연결할 때 \"공개 키 검색이 허용되지 않습니다\" 오류가 발생하는 이유는 무엇입니까?

DDD
DDD원래의
2024-11-01 17:20:02610검색

Why am I getting the

MySQL 연결 오류: "공개 키 검색이 허용되지 않습니다."

Java의 MySQL Connector 8.0을 사용하여 MySQL 데이터베이스에 연결하려고 할 때. 11에서는 다음 예외가 발생할 수 있습니다.

java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed

이 오류는 클라이언트가 서버에서 공개 키를 검색하려고 시도하고 있지만 이를 허용하도록 연결이 구성되지 않았음을 나타냅니다.

해결 방법

문제를 해결하려면 연결 문자열에 allowedPublicKeyRetrieval=true 클라이언트 옵션을 추가해야 합니다. 이렇게 하면 클라이언트가 자동으로 서버에 공개 키를 요청할 수 있습니다. 그러나 이 옵션을 true로 설정하면 악의적인 프록시가 MITM 공격을 수행하여 일반 텍스트 비밀번호를 얻을 수 있다는 점에 유의해야 합니다.

AllowPublicKeyRetrieval을 사용하는 연결 관리자의 예

다음 코드 조각은 AllowPublicKeyRetrieval 옵션을 포함하도록 ConnectionManager 클래스의 getConnection 메소드를 업데이트합니다.

<code class="java">public static Connection getConnection() throws SQLException {

    MysqlDataSource dataSource = new MysqlDataSource();

    dataSource.setUseSSL(false);
    dataSource.setServerTimezone(serverTimeZone);
    dataSource.setServerName(serverName);
    dataSource.setDatabaseName(databaseName);
    dataSource.setPortNumber(portNumber);
    dataSource.setUser(user);
    dataSource.setPassword(password);

    dataSource.setAllowPublicKeyRetrieval(true); // Allow public key retrieval

    return dataSource.getConnection();
}</code>

추가 참고

테스트 또는 개발 목적으로 다음을 수행할 수 있습니다. 또한 제공된 솔루션에서 제안된 대로 useSSL=false를 설정하여 SSL을 비활성화하는 것도 고려해 보세요.

<code class="java">jdbc:mysql://localhost:3306/db?allowPublicKeyRetrieval=true&useSSL=false</code>

위 내용은 Java를 사용하여 MySQL에 연결할 때 \"공개 키 검색이 허용되지 않습니다\" 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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