MySQL 데이터베이스에 연결할 때 SSL 연결에 대한 경고
아래의 두 클래스에서 MySQL 데이터베이스에 접속해 보았습니다.다만, 항상 다음의 에러가 발생합니다.
09년 12월 9일 (수) 22:46:52 CET 2015 WARN:서버 ID 검증 없이 SSL 접속을 확립하는 것은 권장되지 않습니다.MySQL 5.5.45+에 따르면 명시적 옵션이 설정되지 않은 경우 5.6.26+ 및 5.7.6+ 요구 사항에 따라 SSL 연결이 기본적으로 설정되어야 합니다.SSL을 사용하지 않는 기존 응용 프로그램을 준수하기 위해 verifyServerCertificate 속성은 'false'로 설정됩니다.useSSL=false를 설정하여 SSL을 명시적으로 사용하지 않도록 설정하거나 use를 설정해야 합니다.SSL=true 및 서버 인증서 확인을 위한 신뢰 저장소를 제공합니다.
은 this거 with with with with with with with with with with with with 의 시험 수업입니다.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
MySQL 서버로의 접속을 개시하기 위한 디폴트는 최근 변경되어 스택오버플로에 관한 가장 일반적인 질문과 답변을 간략히 살펴본 결과 새로운 값으로 인해 많은 혼란이 발생하고 있습니다.더 나쁜 것은 SSL을 완전히 무효로 하는 것이 표준적인 조언인 것 같다는 것입니다.이것은, 장래의 큰 문제가 되고 있습니다.
경우(만 해당또는 하고 있는 「」( 「로컬 호스트만」)을 을 무효로 해도 없는 해 주세요.useSSL=false
.
그 외의 모든 사용자에게는 증명서 및 호스트 검증과 함께 SSL을 사용하려면 다음 옵션세트가 필요합니다.
- useSSL=true
- sslMode=SNSL_IDENTY
- trustCertificateKeyStoreUrl=파일:path_to_keystore
- trustCertificateKeyStorePassword=패스워드
또한 이미 옵션을 사용하고 있으므로 취약한 SSL 프로토콜도 쉽게 비활성화할 수 있습니다.
- TLSProtocols를 활성화=TLSv1.2
예
따라서 작업 예로서 다음과 같은 큰 단계를 따라야 합니다.
먼저 MySQL 서버 호스트에 대해 생성된 유효한 증명서가 있고 CA 증명서가 클라이언트호스트에 설치되어 있는지 확인합니다(자기서명을 사용하고 있는 경우는, 수동으로 실시할 필요가 있습니다만, 일반적인 퍼블릭 CA의 경우는 이미 설치되어 있습니다).
다음으로 Java 키스토어에 모든 CA 증명서가 포함되어 있는지 확인합니다.Debian/Ubuntu에서는 다음을 실행하여 이 작업을 수행합니다.
update-ca-certificates -f
chmod 644 /etc/ssl/certs/java/cacerts
그런 다음 연결 문자열을 업데이트하여 필요한 모든 옵션을 포함합니다. Debian/Ubuntu에서는 다음과 같습니다(필요에 따라 조정).
jdbc:mysql://{mysql_server}/confluence?useSSL=true&sslMode=VERIFY_IDENTITY&trustCertificateKeyStoreUrl=file%3A%2Fetc%2Fssl%2Fcerts%2Fjava%2Fcacerts&trustCertificateKeyStorePassword=changeit&enabledTLSProtocols=TLSv1.2&useUnicode=true&characterEncoding=utf8
참고 자료: https://beansandanicechianti.blogspot.com/2019/11/mysql-ssl-configuration.html
다음과 같은 내용을 언급합니다.
jdbc:mysql://hostname:3306/hibernatedb?autoReconnect=true&useSSL=false
그러나 xml 구성에서는 기호를 언급하면 IDE에 다음과 같은 오류가 표시됩니다.
엔티티 "useSSL"에 대한 참조는 ';' 구분 기호로 끝나야 합니다.
그런 다음 다음과 같이 결정되는 대신 명시적으로 를 사용해야 합니다.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");
try (Connection conn = DriverManager.getConnection(connectionUrl, properties)) {
...
} catch (SQLException e) {
...
}
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>
저도 이 경고를 발견하고 이 코드 예시와 같이 접속 문자열에 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"/>
저는 괜찮았습니다.
this.conn = (Connection)DriverManager
.getConnection(url + dbName + "?useSSL=false", userName, password);
config xml에서 휴지 상태에 이 속성을 사용합니다.
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/bookshop?serverTimezone=UTC&useSSL=false
</property>
제외 - serverTimezone=UTC - 동작하지 않음
Java 데이터베이스 연결 중 경고를 비활성화하려면 다음 개념을 사용합니다.
autoReconnect=true&useSSL=false
연결만 변경하면 됩니다.다음과 같은 URL:
String connectionURL = jdbc:mysql://localhost:3306/Peoples?autoReconnect=true&useSSL=false
그러면 SSL이 비활성화되고 SSL 오류도 억제됩니다.
해결 방법 이 문제를 해결하려면 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
새로운 버전의 mysql-connector는 디폴트로 SSL 접속을 확립하여 해결합니다.
mysql-connector-java-5.0.8.zip 등의 이전 버전의 mysql-connector를 다운로드합니다.
. 또는 . .Windows용 OpenSSL을 다운로드하여 설정 순서에 따릅니다.
https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-connp-props-security.html, 기준sslModel
되지 않는 속성인 "Regacy"가 "Properties"로 되었습니다.useSSL
,requireSSL
, , , , 입니다.verifyServerCertificate
접속 할 수 sslModel=DISABLED
.
현재 개발 모드이기 때문에 Tomcat이 아닌 mysql 서버 구성에서 useSSL을 No로 설정합니다.Workbench에서 Manage Access Settings\Manage Server Connections(액세스 설정 관리)로 이동하여 연결을 선택.내부 연결 탭이 SSL 탭으로 이동하여 설정을 사용하지 않도록 설정했습니다.나한테는 통했어
mysql 커넥터를 업데이트하십시오.그게 도움이 될 거야.
실제로 네트워크에 접속되어 있거나 실제 데이터가 있는 실제 환경에서 작업하고 있는 경우에는 useSSL=false 옵션을 포함하여 SSL을 비활성화하지 마십시오.
최신 프로토콜 버전을 포함하도록 JDBC 연결 문자열을 업데이트해 보십시오. jdbc:mysql:///?enabledTLSProtocols=SJDBCv1.2
JDK 11에서 DB 연결을 확립할 때 TLS 프로토콜의 유형을 명시적으로 언급해야 합니다.
플랫폼 독립형 zip 또는 tar https://dev.mysql.com/downloads/connector/j/?os=26을 사용하면 됩니다.
8.0.13 현재useSSL
파라미터가 폐지되었습니다.sslMode
:
MySQL : : MySQL Connector / J 8.0 개발자 가이드 : : 6.3.5 보안
ssl 모드
기본적으로는 네트워크 연결은 SSL로 암호화됩니다.이 속성을 통해 보안 연결을 끄거나 다른 수준의 보안을 선택할 수 있습니다.다음 값이 허용됩니다. "비암호화 연결 확립", "PREFERED", "비암호화 연결 확립", "비암호화 연결 폴백", "REQUIRED", "비암호화 연결 확립", "VERIFY_CA", "비암호화 연결 확립", "REQUIRED"와 같은 값입니다.서버 TLS 증명서를 설정된 Certificate Authority(CA; 인증국) 증명서와 대조합니다.「 VERIFY _ IDENTY 」 - 「 VERIFY _ CA 」와 같습니다만, 서버 증명서가 접속을 시도하는 호스트와 일치하고 있는 것을 확인합니다.
이 속성은 사용되지 않는 레거시 속성 "useSSL", "requireSSL" 및 "verifyServerCertificate"를 대체했습니다. 이러한 속성은 여전히 허용되지만 "sslMode"가 명시적으로 설정되지 않은 경우 "useSSL=false"가 "sslMode" 값으로 변환됩니다.무효";
알 수 없는 매크로: {"useSSL=true", "displays"SSL=false", "verifyServerCertificate=false"}는 "sslMode=False"로 변환됩니다.
알 수 없는 매크로: {"useSSL=true", "displays"SSL=true", "verifyServerCertificate=false"}가 "sslMode="로 변환됨필수";
알 수 없는 매크로: {"useSSL=true" 및 "verifyServerCertificate=true"}이(가) "sslMode=SMB_CA"로 변환됩니다."sslMode=SNSL_IDENTY"에 해당하는 레거시 설정은 없습니다.모든 서버 버전에서 "sslMode"의 기본 설정은 "PREferred"이며 "use SSL=true", "sl"의 기존 설정과 동일합니다.SSL=false" 및 "verifyServerCertificate=false"는 상황에 따라 Connector/J 8.0.12 이전 버전의 기본 설정과 다릅니다.레거시 속성을 계속 사용하고 이전 기본 설정에 의존하는 응용 프로그램은 검토해야 합니다.
"sslMode"가 명시적으로 설정된 경우 레거시 속성은 무시됩니다."sslMode" 또는 "useSSL" 중 명시적으로 설정된 항목이 없는 경우 기본 설정인 "sslMode=SNSL"이 적용됩니다.
버전 8.0.13 이후 기본 설정
언급URL : https://stackoverflow.com/questions/34189756/warning-about-ssl-connection-when-connecting-to-mysql-database
'programing' 카테고리의 다른 글
동일한 기호 중 일부를 사용하여 두 개의 공유 라이브러리 연결 (0) | 2022.08.17 |
---|---|
Java에서 현재 연도의 정수 값을 가져옵니다. (0) | 2022.08.14 |
Vuex 스토어에서 상수 가져오기 (0) | 2022.08.14 |
Gradle - 툴체인을 사용한 플랫폼 'JDK 7 (1.7)'을 타깃으로 하지 못했습니다. (0) | 2022.08.14 |
정적 변수는 C 및 C++ 어디에 저장됩니까? (0) | 2022.08.14 |