MySQL 데이터베이스에 연결할 때 SSL 연결에 대한 경고
아래 두 클래스를 사용하여 MySQL 데이터베이스에 연결을 시도했습니다. 그러나 항상이 오류가 발생합니다.
CET 2015 WARN : 서버의 신원 확인없이 SSL 연결을 설정하지 않는 것이 좋습니다. MySQL 5.5.45+, 5.6.26+ 및 5.7.6+ 요구 사항에 따르면 명시 적 옵션이 설정되지 않은 경우 기본적으로 SSL 연결을 설정해야합니다. SSL을 사용하지 않는 기존 애플리케이션을 준수하기 위해 verifyServerCertificate 특성이 'false'로 설정됩니다. useSSL = false를 설정하여 SSL을 명시 적으로 비활성화하거나 useSSL = true를 설정하고 서버 인증서 확인을위한 신뢰 저장소를 제공해야합니다.
다음은 main
메소드 가있는 테스트 클래스입니다 .
public class TestDatabase {
public static void main(String[] args) {
Database db = new Database();
try {
db.connect();
} catch (Exception e) {
e.printStackTrace();
}
db.close();
}
}
이것은 Database
클래스입니다 :
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Database {
private Connection con;
public void connect() throws Exception{
if(con != null) return;
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new Exception("No database");
}
String connectionURL = "jdbc:mysql://localhost:3306/Peoples";
con = DriverManager.getConnection(connectionURL, "root", "milos23");
}
public void close(){
if(con != null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
연결 URL은 다음과 같아야합니다.
jdbc:mysql://localhost:3306/Peoples?autoReconnect=true&useSSL=false
이렇게하면 SSL이 비활성화되고 SSL 오류도 억제됩니다.
SSL을 사용하지만 서버 확인을 끄는 방법 (예 : 컴퓨터의 개발 모드에있는 경우) :
jdbc:mysql://localhost:3306/Peoples?verifyServerCertificate=false&useSSL=true
url
같은 언급 :
jdbc:mysql://hostname:3306/hibernatedb?autoReconnect=true&useSSL=false
그러나 xml 구성에서 언급 하고 서명 할 때 IDE는 아래 오류를 표시합니다.
The reference to entity "useSSL" must end with the ';' delimiter.
그리고 당신은 명시 적으로 사용해야하는 &
대신 &
으로 결정하는 &
가 xml
에 이후 xml
이 같은 XML 구성의 URL을 제공 할 수있다 :
<property name="connection.url">jdbc:mysql://hostname:3306/hibernatedb?autoReconnect=true&useSSL=false</property>
다른 방법은 다음과 같습니다.
Properties properties = new Properties();
properties.setProperty("user", "root");
properties.setProperty("password", "milos23);
properties.setProperty("useSSL", "false");
properties.setProperty("autoReconnect", "true");
try (Connection conn = DriverManager.getConnection(connectionUrl, properties)) {
...
} catch (SQLException e) {
...
}
경고를 제거하기 위해 자동 재 연결 설정이 필요하다고 생각하지 않습니다.
이 경고도 발견 한 다음이 예제 코드와 같이 연결 문자열에 SSL = false 접미사를 사용하여 수정했습니다.
예:
connectionString = "jdbc:mysql://{server-name}:3306/%s?useUnicode=yes&characterEncoding=UTF-8&useSSL=false"
다음과 같이 mysql 경로를 사용해야합니다.
<property name="url" value="jdbc:mysql://localhost:3306/world?useSSL=true"/>
이것을 사용하여 MySQL과 연결하는 동안 하이브의 문제를 해결하십시오.
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true&autoReconnect=true&useSSL=false</value>
<description>metadata is stored in a MySQL server</description>
</property>
이것은 나에게 괜찮았다.
this.conn = (Connection)DriverManager
.getConnection(url + dbName + "?useSSL=false", userName, password);
구성 XML에서 최대 절전 모드 로이 속성을 사용합니다.
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/bookshop?serverTimezone=UTC&useSSL=false
</property>
-serverTimezone = UTC 없이- 작동하지 않습니다
새로운 버전의 mysql-connector는 기본적으로 SSL 연결을 설정하여 해결합니다.
mysql-connector-java-5.0.8.zip 과 같은 mysql-connector의 이전 버전을 다운로드하십시오.
. . 또는. . Windows 용 OpenSSL을 다운로드 하고 설정 방법을 따르십시오.
해결 방법 MySQL 연결 문자열 끝에 useSSL = false를 추가하십시오.
전의.
application.properties
MySQL의 데이터 소스
spring.datasource.url=jdbc:mysql://localhost/dbname?useSSL=false
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
현재 개발 모드에 있기 때문에 Tomcat이 아니라 mysql 서버 구성에서 useSSL을 No로 설정했습니다. 워크 벤치에서 액세스 설정 \ 서버 연결 관리로 이동했습니다.-> 내 연결을 선택했습니다. 내부 연결 탭이 SSL 탭으로 이동하여 설정을 비활성화했습니다. 나를 위해 일했다.
'IT' 카테고리의 다른 글
컬렉션의 hashCode 메서드에 대한 최상의 구현 (0) | 2020.03.19 |
---|---|
Eclipse에서 작업 공간을 삭제하는 방법? (0) | 2020.03.19 |
LINQ를 사용하여 "not in"쿼리를 어떻게 수행 하시겠습니까? (0) | 2020.03.19 |
Visual Studio Code에서 구문 강조를위한 언어를 수동으로 설정하는 방법 (0) | 2020.03.19 |
반응 형 레이아웃에서 요소를 숨기시겠습니까? (0) | 2020.03.19 |