MySQL डेटाबेस से कनेक्ट करते समय SSL कनेक्शन के बारे में चेतावनी


312

नीचे दो वर्गों के साथ, मैंने एक MySQL डेटाबेस से जुड़ने की कोशिश की है। हालाँकि, मुझे हमेशा यह त्रुटि मिलती है:

Wed Dec 09 22:46:52 CET 2015 WARN: सर्वर की पहचान सत्यापन के बिना SSL कनेक्शन की स्थापना की सिफारिश नहीं की गई है। MySQL 5.5.45+, 5.6.26+ और 5.7.6+ आवश्यकताओं के अनुसार SSL कनेक्शन डिफ़ॉल्ट रूप से स्थापित किया जाना चाहिए यदि स्पष्ट विकल्प सेट नहीं है। SSL का उपयोग नहीं करने वाले मौजूदा अनुप्रयोगों के अनुपालन के लिए VerServerCertkut संपत्ति 'गलत' पर सेट है। आपको उपयोग करने के लिए SSL को स्पष्ट रूप से अक्षम करने की आवश्यकता है उपयोग = गलत, या सेट का उपयोग करेंSSSS = सही और सर्वर प्रमाणपत्र सत्यापन के लिए ट्रस्टस्टोर प्रदान करें।

इस 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();
            }
        }
    }
}

2
उत्तर के लिए धन्यवाद, ठीक है, मुझे नहीं पता था कि मुझे अपने स्ट्रिंग स्ट्रिंग के अंत में ssl = true या false लगाने की आवश्यकता है।
मिलोसोरी

धन्यवाद, तो यह नया कनेक्शन कैसा है?
user3290180

4
यह कोई त्रुटि नहीं है, यह एक चेतावनी है।
फर्नांडो सिल्वेरा

जवाबों:


577

आपका कनेक्शन URL नीचे की तरह दिखना चाहिए,

jdbc:mysql://localhost:3306/Peoples?autoReconnect=true&useSSL=false

यह SSL को निष्क्रिय कर देगा और SSL त्रुटियों को भी दबा देगा।


41
jdbc कनेक्शन स्ट्रिंग में सेमी कोलोन के साथ SHOULD NOT अंत है
Amith

8
in tomcat reference file jdbc: mysql: // localhost: 3306 / databaseName; autoReconnect = true; उपयोगएसएसएल = गलत;
Amith

27
अर्धविराम के साथ भ्रम संभवतः इस तथ्य के कारण है कि XML कॉन्फ़िगरेशन में आपके पास इसके रूप में होने की आवश्यकता है? AutoReconnect = true & amp; useSSL = false। अन्यथा पार्सर सोचता है कि आपके पास कुछ अजीब इकाई है जिसे आपको ';'
बोसोन जुएल

25
हाइबरनेट में मेरा एक ही मुद्दा था लेकिन URL द्वारा इस तरह हल किया गया: jdbc:mysql://localhost:3306/Peoples?autoReconnect=true&useSSL=false मैंने & amp; की जगह &
साकिब अहमद

2
@Rogerthat नेटवर्क सुरक्षित होने पर SSL को अक्षम करने के मामले हैं। उदाहरण के लिए मेरे पास SQL ​​सर्वर चल रहे हैं जो केवल उसी भौतिक हार्डवेयर पर क्लाइंट्स द्वारा एक्सेस किए जाते हैं।
रॉडने

131

SSL का उपयोग करने के बारे में कैसे, लेकिन सर्वर सत्यापन को बंद कर दें (जैसे कि जब अपने कंप्यूटर पर विकास मोड में हो):

jdbc:mysql://localhost:3306/Peoples?verifyServerCertificate=false&useSSL=true

यह है कि मैं IntelliJ / DataGrip के माध्यम से SSL पर एक MySQL डेटाबेस से कनेक्ट करने के लिए क्या करना चाहिए
स्वराज

23

इस urlतरह का उल्लेख करें :

jdbc:mysql://hostname:3306/hibernatedb?autoReconnect=true&useSSL=false

लेकिन xml कॉन्फ़िगरेशन में जब आप &साइन का उल्लेख करते हैं , तो आईडीई त्रुटि के नीचे दिखाता है:

इकाई "यूएसएसएसएसएल" का संदर्भ ';' के साथ समाप्त होना चाहिए सीमांकक।

और फिर आपको &इसके बजाय स्पष्ट &रूप &से निर्धारित करने के लिए उपयोग करना होगा क्योंकि xmlउसके बाद xmlआपको xml कॉन्फ़िगरेशन में url देना होगा:

<property name="connection.url">jdbc:mysql://hostname:3306/hibernatedb?autoReconnect=true&amp;useSSL=false</property>

22

एक वैकल्पिक तरीका होगा:

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) {
...
}

अच्छा लगता है, लेकिन मैं अपने आवेदन में कैसे प्राप्त करता हूं?
फुस्का सॉफ्टवेयर

12

मुझे यह चेतावनी भी मिली तो मैंने इसे इस उदाहरण कोड की तरह कनेक्शन स्ट्रिंग में SSL = गलत प्रत्यय का उपयोग करके ठीक किया।

उदाहरण:

connectionString = "jdbc:mysql://{server-name}:3306/%s?useUnicode=yes&characterEncoding=UTF-8&useSSL=false"

11

MySQL सर्वर से कनेक्शन शुरू करने की चूक हाल के दिनों में बदल दी गई थी, और (सबसे लोकप्रिय सवालों और स्टैक ओवरफ्लो पर जवाब के माध्यम से एक त्वरित नज़र से) नए मान बहुत भ्रम पैदा कर रहे हैं। इससे भी बुरी बात यह है कि मानक सलाह पूरी तरह से SSL को अक्षम करने के लिए लगती है, जो कि बनाने में थोड़ी सी आपदा है।

अब, यदि आपका कनेक्शन वास्तव में नेटवर्क (केवल लोकलहोस्ट) के संपर्क में नहीं है या आप बिना वास्तविक डेटा के साथ गैर-उत्पादन वातावरण में काम कर रहे हैं, तो सुनिश्चित करें: विकल्प को शामिल करके एसएसएल को अक्षम करने में कोई बुराई नहीं है useSSL=false

बाकी सभी के लिए, SSL और प्रमाणपत्र सत्यापन के साथ काम करने के लिए निम्नलिखित विकल्पों की आवश्यकता होती है:

  • useSSL सच =
  • sslMode = VERIFY_IDENTITY
  • trustCertificateKeyStoreUrl = फ़ाइल: path_to_keystore
  • trustCertificateKeyStorePassword = पासवर्ड

अतिरिक्त बोनस के रूप में, यह देखते हुए कि आप पहले से ही विकल्पों के साथ खेल रहे हैं, कमजोर एसएसएल प्रोटोकॉल को भी निष्क्रिय करना सरल है:

  • enabledTLSProtocols = TLSv1.2

उदाहरण

तो एक काम के उदाहरण के रूप में आपको निम्नलिखित व्यापक चरणों का पालन करना होगा:

पहले, सुनिश्चित करें कि आपके पास MySQL सर्वर होस्ट के लिए एक मान्य प्रमाणपत्र है, और यह कि क्लाइंट होस्ट पर CA प्रमाणपत्र स्थापित है (यदि आप स्व-हस्ताक्षरित का उपयोग कर रहे हैं, तो आपको मैन्युअल रूप से ऐसा करने की आवश्यकता होगी, लेकिन सुनिश्चित करने के लिए लोकप्रिय सार्वजनिक CAs यह पहले से ही वहाँ होगा)।

अगला, सुनिश्चित करें कि जावा कीस्टॉर में सभी CA प्रमाण पत्र हैं। डेबियन / उबंटू पर इसे चलाकर हासिल किया जाता है:

update-ca-certificates -f
chmod 644 /etc/ssl/certs/java/cacerts

फिर अंत में, सभी आवश्यक विकल्पों को शामिल करने के लिए कनेक्शन स्ट्रिंग को अपडेट करें, जो डेबियन / उबंटू पर कुछ सा होगा (आवश्यकता के अनुसार अनुकूलित करें):

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


न केवल यह सही उत्तर है, बल्कि यह सबसे विस्तृत और सुरक्षित भी है। यदि आपको एसएसएल पर चेतावनी मिलती है, तो आपको इसे कभी नहीं छोड़ना चाहिए (सैंडबॉक्स और स्थानीय प्रतिष्ठानों को छोड़कर)। आपने मुझे Azure MySQL से कनेक्ट करने वाले Kubernetes Keycloack 9.0.2 क्लस्टर के लिए सही समाधान की ओर इशारा किया। आपका बहुत बहुत धन्यवाद!
इको

10

आपको अपना mysql पथ इस तरह से उपयोग करने की आवश्यकता है:

<property name="url" value="jdbc:mysql://localhost:3306/world?useSSL=true"/>

9

यह मेरे लिए ठीक था:

this.conn = (Connection)DriverManager
    .getConnection(url + dbName + "?useSSL=false", userName, password);

9

MySQL के साथ संबंध बनाते समय हाइव में समस्या को हल करने के लिए इसका उपयोग करें

<property>
   <name>javax.jdo.option.ConnectionURL</name>
   <value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true&amp;autoReconnect=true&amp;useSSL=false</value>
   <description>metadata is stored in a MySQL server</description>
</property>

लेकिन यह और ऑपरेटर के साथ क्यों नहीं होता है ? मेरे पास कुछ था jdbc:mysql://localhost/metastore?useSSL=false&createDatabaseIfNotExist=true। बिना और यह ठीक काम करता है।
कुलसंगर

मेरे लिए पोस्ट किया गया मूल्य सुचारू रूप से काम करता है, इसलिए मैं इसे 2017 के अंत महीने में एक उत्तर के रूप में और हाइव-2.1.1 हाइव-साइट.एक्सएमएल के साथ काम करने के लिए चिह्नित करूंगा।
आरिफमुस्तफा

7

मैं कॉन्फ़िगर xml में हाइबरनेट के लिए इस संपत्ति का उपयोग करता हूं

<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/bookshop?serverTimezone=UTC&amp;useSSL=false
</property>

बिना - serverTimezone = UTC - यह काम नहीं करता है


4

समाधान इसे ठीक करने के लिए, MySQL कनेक्शन स्ट्रिंग के अंत में एक प्रयोग करें = गलत जोड़ें।

पूर्व।

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

2

mysql-कनेक्टर के नए संस्करण डिफ़ॉल्ट रूप से SSL कनेक्शन स्थापित करते हैं ... इसे हल करने के लिए:

Mysql- कनेक्टर के पुराने संस्करण को डाउनलोड करें जैसे कि mysql-connector-java-5.0.8.zip

। । या। । विंडोज के लिए ओपनएसएसएल डाउनलोड करें और इसे कैसे सेट करें निर्देशों का पालन करें


0

चूंकि मैं वर्तमान में विकास मोड में हूं, इसलिए मैं उपयोग कर रहा हूं कि कोई भी टास्कैट में नहीं बल्कि mysql सर्वर कॉन्फ़िगरेशन में उपयोग करें। कार्यक्षेत्र से एक्सेस सेटिंग्स \ प्रबंधित सर्वर कनेक्शन प्रबंधित करने के लिए गया -> मेरा कनेक्शन चयनित। अंदर कनेक्शन टैब एसएसएल टैब पर गया और सेटिंग्स को अक्षम कर दिया। मेरे लिए काम किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.