W przypadku dwóch poniższych klas próbowałem połączyć się z bazą danych MySQL. Jednak zawsze pojawia się ten błąd:
Śr. 09 grudnia 22:46:52 CET 2015 OSTRZEŻENIE: Nawiązywanie połączenia SSL bez weryfikacji tożsamości serwera nie jest zalecane. Zgodnie z wymaganiami MySQL 5.5.45+, 5.6.26+ i 5.7.6+ połączenie SSL musi zostać nawiązane domyślnie, jeśli nie jest ustawiona jawna opcja. W celu zapewnienia zgodności z istniejącymi aplikacjami, które nie używają protokołu SSL, właściwość VerifyServerCertificate ma wartość „fałsz”. Musisz jawnie wyłączyć protokół SSL, ustawiając parametr useSSL = false, lub ustawić parametr useSSL = true i podać magazyn zaufanych certyfikatów do weryfikacji certyfikatu serwera.
To jest klasa testowa z main
metodą:
public class TestDatabase {
public static void main(String[] args) {
Database db = new Database();
try {
db.connect();
} catch (Exception e) {
e.printStackTrace();
}
db.close();
}
}
To jest Database
klasa:
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();
}
}
}
}
java
ssl
database-connection
mysql-error-1064
Milos86
źródło
źródło
Odpowiedzi:
Twój adres URL połączenia powinien wyglądać jak poniżej,
Spowoduje to wyłączenie SSL, a także pominie błędy SSL.
źródło
jdbc:mysql://localhost:3306/Peoples?autoReconnect=true&useSSL=false
użyłem & amp; zamiast &Co powiesz na używanie SSL, ale wyłączenie weryfikacji serwera (na przykład w trybie programowania na własnym komputerze):
źródło
Wspomnij o
url
:Ale w konfiguracji xml, kiedy wspominasz o
&
znaku, IDE pokazuje następujący błąd:A potem trzeba jawnie użyć
&
zamiast&
być określana jako&
oxml
niej wxml
trzeba podać adres URL w konfiguracji xml jak poniżej:źródło
Alternatywną metodą byłoby:
źródło
Znalazłem to ostrzeżenie, a następnie naprawiłem je, używając SSL = fałszywy przyrostek w ciągu połączenia, tak jak w tym przykładowym kodzie.
Przykład:
źródło
Domyślne ustawienia inicjowania połączenia z serwerem MySQL zostały zmienione w niedawnej przeszłości i (od szybkiego przejrzenia najpopularniejszych pytań i odpowiedzi na temat przepełnienia stosu) nowe wartości powodują wiele zamieszania. Co gorsza, standardowa rada zdaje się całkowicie wyłączać SSL, co jest trochę katastrofą w trakcie tworzenia.
Teraz, jeśli twoje połączenie nie jest rzeczywiście narażone na działanie sieci (tylko host lokalny) lub pracujesz w środowisku nieprodukcyjnym bez rzeczywistych danych, to na pewno: wyłączenie tej opcji nie zaszkodzi
useSSL=false
.Dla wszystkich innych wymagany jest następujący zestaw opcji, aby protokół SSL działał z weryfikacją certyfikatu i hosta:
Jako dodatkowy bonus, ponieważ już grasz z opcjami, łatwo jest również wyłączyć słabe protokoły SSL:
Przykład
Tak więc jako działający przykład musisz wykonać następujące ogólne kroki:
Po pierwsze, upewnij się, że masz wygenerowany prawidłowy certyfikat dla hosta serwera MySQL oraz że certyfikat CA jest zainstalowany na hoście klienta (jeśli używasz samopodpisu, prawdopodobnie będziesz musiał to zrobić ręcznie, ale dla popularne publiczne urzędy certyfikacji już tam będą).
Następnie upewnij się, że magazyn kluczy Java zawiera wszystkie certyfikaty CA. W systemie Debian / Ubuntu można to osiągnąć, uruchamiając:
Następnie zaktualizuj parametry połączenia, tak aby zawierały wszystkie wymagane opcje, które na Debianie / Ubuntu byłyby nieco podobne (dostosuj zgodnie z wymaganiami):
Odniesienie: https://beansandanicechianti.blogspot.com/2019/11/mysql-ssl-configuration.html
źródło
musisz użyć swojej ścieżki mysql w następujący sposób:
źródło
To było dla mnie OK:
źródło
Użyj tego, aby rozwiązać problem w gałęzi podczas nawiązywania połączenia z MySQL
źródło
jdbc:mysql://localhost/metastore?useSSL=false&createDatabaseIfNotExist=true
. Bez i działa dobrze.Używam tej właściwości do hibernacji w config xml
bez - serverTimezone = UTC - to nie działa
źródło
Rozwiązanie Aby to naprawić, dodaj useSSL = false na końcu ciągu połączenia MySQL:
dawny.
application.properties
źródło danych mysql
źródło
nowe wersje konektora mysql domyślnie ustanawiają połączenie SSL ... aby je rozwiązać:
Pobierz starszą wersję konektora mysql, takiego jak mysql-connector-java-5.0.8.zip
. . lub. . Pobierz OpenSSL dla Windows i postępuj zgodnie z instrukcjami, jak to ustawić
źródło
Ponieważ jestem obecnie w trybie programowania, ustawiłem useSSL na Nie, nie w tomcat, ale w konfiguracjach serwera mysql. Poszedł do Zarządzaj ustawieniami dostępu \ Zarządzaj połączeniami serwera ze środowiska roboczego -> Wybrałem moje połączenie. Wewnątrz zakładka połączenia przeszła do zakładki SSL i wyłączyła ustawienia. Pracował dla mnie.
źródło