java - قاعدة - مشاريع بلغة الجافا




تحذير حول اتصال SSL عند الاتصال بقاعدة بيانات MySQL (8)

استخدم هذا لحل المشكلة في خلية أثناء إجراء اتصال مع الخلية

<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>

مع الفئتين أدناه ، لقد حاولت الاتصال بقاعدة بيانات MySQL. ومع ذلك ، أتلقى هذا الخطأ دائمًا:

Wed Dec 09 22:46:52 CET 2015 تحذير: لا ينصح بتأسيس اتصال SSL دون التحقق من هوية الخادم. وفقًا لـ MySQL 5.5.45+ ، يجب إنشاء اتصال طبقة المقابس الآمنة 5.6.26+ و 5.7.6+ بشكل افتراضي إذا لم يتم تعيين خيار صريح. للتوافق مع التطبيقات الحالية التي لا تستخدم طبقة المقابس الآمنة ، يتم تعيين خاصية checkServerCertificate إلى "false". تحتاج إما إلى تعطيل SSL بشكل صريح عن طريق تعيين useSSL = false ، أو تعيين useSSL = true وتوفير truststore للتحقق من شهادة الخادم.

هذه هي فئة الاختبار مع الطريقة 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();
            }
        }
    }
}


بما أنني حاليًا في وضع التطوير ، فقد قمت بتعيين useSSL على "لا" ليس في برنامج catcat ولكن في تكوينات خادم mysql. ذهبت لإدارة إعدادات الوصول \ إدارة اتصالات الخادم من طاولة العمل -> تم اختيار اتصالي. ذهبت علامة التبويب اتصال داخلي إلى علامة التبويب SSL وتعطيل الإعدادات. عملت لي.


تحتاج إلى استخدام مسار mysql الخاص بك مثل هذا:

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

طريقة بديلة هي:

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

على الرغم من ذلك ، لا أعتقد أن إعداد إعادة الاتصال التلقائي ضروري لإزالة التحذير.


كان هذا جيدًا بالنسبة لي:

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

ماذا عن استخدام طبقة المقابس الآمنة مع إيقاف تشغيل التحقق من الخادم (مثل عندما تكون في وضع التطوير على الكمبيوتر الخاص بك):

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

يجب أن يبدو عنوان URL للاتصال أدناه ،

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

سيؤدي ذلك إلى تعطيل طبقة المقابس الآمنة وكذلك منع أخطاء طبقة المقابس الآمنة.