মাইএসকিউএল ডাটাবেসে কানেক্ট করার সময় এসএসএল সংযোগ সম্পর্কে সতর্কতা


312

নীচের দুটি শ্রেণীর সাথে, আমি একটি মাইএসকিউএল ডাটাবেসের সাথে সংযোগের চেষ্টা করেছি। তবে, আমি সর্বদা এই ত্রুটিটি পাই:

বুধ ডিসেম্বর 09 22:46:52 সিইটি 2015 সতর্কতা: সার্ভারের পরিচয় যাচাইকরণ ছাড়াই এসএসএল সংযোগ স্থাপনের প্রস্তাব দেওয়া হয় না। মাইএসকিউএল 5.5.45+ অনুযায়ী, 5.6.26+ এবং 5.7.6+ প্রয়োজনীয়তা সুস্পষ্ট বিকল্প সেট না করা থাকলে ডিফল্টরূপে এসএসএল সংযোগ স্থাপন করতে হবে। এসএসএল ব্যবহার না করা বিদ্যমান অ্যাপ্লিকেশনগুলির সাথে সম্মতিতে যাচাইকরণের সার্ভিস সম্পত্তিটি 'মিথ্যা' হিসাবে সেট করা আছে। আপনি হয় এসএসএলকে স্পষ্টভাবে ব্যবহারযোগ্য এসএসএল = মিথ্যা সেট করে, অথবা ব্যবহার এসএসএল = সত্য সেট করে সার্ভার শংসাপত্র যাচাইয়ের জন্য ট্রাস্টস্টোর সরবরাহ করার প্রয়োজন।

এটি 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
উত্তরের জন্য ধন্যবাদ, ঠিক আছে, আমি কেবল জানতাম না যে আমার স্ট্রিং সংযোগের URL এর শেষে আমাকে এসএসএল = সত্য বা মিথ্যা লাগানো দরকার।
মিলোস 86

ধন্যবাদ, তাহলে এটি কীভাবে নতুন সংযোগের URL?
ব্যবহারকারী 3290180

4
এটি ত্রুটি নয়, এটি একটি সতর্কতা।
ফার্নান্দো সিলভিরা 14

উত্তর:


577

আপনার সংযোগের URL নীচের মত দেখতে হবে,

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

এটি এসএসএল অক্ষম করবে এবং এসএসএল ত্রুটিগুলিও দমন করবে।


41
জেডিবিসি সংযোগের স্ট্রিংটি শেষ হবে না সেমি কোলন দিয়ে
এমিথ

8
টমক্যাট প্রসঙ্গে ফাইল jdbc: mysql: // লোকালহোস্ট: 3306 / ডাটাবেসনাম? অটোআরঙ্কনেক্ট = সত্য; ইউএসএসএল = মিথ্যা;
অমিত 14

27
সেমিকোলনের সাথে বিভ্রান্তি সম্ভবত এই কারণে হয়েছে যে এক্সএমএল কনফিগারেশনে আপনার এটির প্রয়োজন? অটোআরকনেক্ট = ট্রু & অ্যাম্প; ইউএসএসএল = মিথ্যা। অন্যথায় পার্সার মনে করে যে আপনার কিছু অদ্ভুত সত্তা রয়েছে যা আপনার '' দিয়ে শেষ করতে হবে;
বোস্টোন

25
হাইবারনেটে আমার একই সমস্যা ছিল তবে ইউআরএল এর দ্বারা সমাধান হয়েছে: jdbc:mysql://localhost:3306/Peoples?autoReconnect=true&useSSL=false আমি ব্যবহার করেছি & amp; পরিবর্তে &
সাকিব আহমেদ

2
@ রোজারটি এই নেটওয়ার্কটি সুরক্ষিত থাকলে এসএসএল অক্ষম করার ক্ষেত্রে মামলা রয়েছে। উদাহরণস্বরূপ, আমার কাছে এসকিউএল সার্ভারগুলি কেবল একই শারীরিক হার্ডওয়্যারের ক্লায়েন্টদের দ্বারা অ্যাক্সেস করা পাত্রে চলছে।
রডনি

131

কীভাবে এসএসএল ব্যবহার করবেন তবে সার্ভার যাচাইকরণ বন্ধ করবেন (যেমন আপনার নিজের কম্পিউটারে যখন ডেভলপমেন্ট মোডে থাকে):

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

ইন্টেলিজ / ডেটাগ্রিপের মাধ্যমে এসএসএলের মাধ্যমে কোনও মাইএসকিউএল ডাটাবেসের সাথে সংযোগ স্থাপনের জন্য আমার যা করা দরকার তা হল
স্বরাজ

23

এর urlমতো উল্লেখ করুন :

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

কিন্তু xML কনফিগারেশনে আপনি &সাইন উল্লেখ করার সময়, IDE ত্রুটির নীচে দেখায়:

সত্তা "ব্যবহার এসএসএল" এর উল্লেখ অবশ্যই '' দিয়ে শেষ হবে; বিভেদক।

এবং তারপর আপনি স্পষ্টভাবে ব্যবহার করতে হবে &পরিবর্তে &যেমন নির্ধারণ করতে হবে &দ্বারা 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

আমি এই সতর্কতাটিও পেয়েছি তারপরে আমি এসএসএল = মিথ্যা প্রত্যয় ব্যবহার করে উদাহরণ উদাহরণের মতো সংযোগের স্ট্রিংয়ে এটি স্থির করেছি।

উদাহরণ:

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

11

মাইএসকিউএল সার্ভারের সাথে সংযোগের সূচনা করার জন্য ডিফল্টগুলি সাম্প্রতিক অতীতে পরিবর্তন করা হয়েছিল এবং (স্ট্যাক ওভারফ্লো সম্পর্কে সর্বাধিক জনপ্রিয় প্রশ্ন এবং উত্তরগুলির তাত্ক্ষণিক দৃষ্টি থেকে) নতুন মানগুলি প্রচুর বিভ্রান্তির সৃষ্টি করছে। সবচেয়ে খারাপটি হ'ল মানক পরামর্শটি সম্পূর্ণরূপে এসএসএলকে অক্ষম করা বলে মনে হচ্ছে যা কিছুটা বিপর্যয়।

এখন, যদি আপনার সংযোগটি প্রকৃতপক্ষে নেটওয়ার্কের কাছে উন্মুক্ত না হয় (কেবলমাত্র লোকালহোস্ট) বা আপনি কোনও প্রকৃত ডেটাবিহীন একটি উত্পাদনহীন পরিবেশে কাজ করছেন তবে নিশ্চিত হন: বিকল্পটি অন্তর্ভুক্ত করে এসএসএল অক্ষম করার কোনও ক্ষতি নেই useSSL=false

প্রত্যেকের জন্য, নিম্নলিখিত শংসাপত্র এবং হোস্ট যাচাইকরণের সাথে এসএসএল কাজ করার জন্য বিকল্পগুলির সেটটি প্রয়োজন:

  • useSSL সত্য =
  • sslMode = VERIFY_IDENTITY
  • trustCertificateKeyStoreUrl = ফাইল: path_to_keystore
  • trustCertificateKeyStorePassword = পাসওয়ার্ড

একটি যুক্ত বোনাস হিসাবে, আপনি ইতিমধ্যে বিকল্পগুলির সাথে খেলছেন দেখে, দুর্বল এসএসএল প্রোটোকলগুলিও অক্ষম করা সহজ:

  • enabledTLSProtocols = TLSv1.2

উদাহরণ

সুতরাং একটি কার্যকারী উদাহরণ হিসাবে আপনাকে নিম্নলিখিত বিস্তৃত পদক্ষেপগুলি অনুসরণ করতে হবে:

প্রথমে নিশ্চিত হয়ে নিন যে মাইএসকিউএল সার্ভার হোস্টের জন্য আপনার কাছে বৈধ শংসাপত্র তৈরি হয়েছে এবং সিএ শংসাপত্রটি ক্লায়েন্ট হোস্টে ইনস্টল করা আছে (আপনি যদি স্ব-স্বাক্ষরিত হন, তবে আপনাকে সম্ভবত এটি নিজেই করতে হবে, তবে এর জন্য জনপ্রিয় পাবলিক সিএ এটি ইতিমধ্যে থাকবে)।

এরপরে, নিশ্চিত হয়ে নিন যে জাভা কীস্টোরে সমস্ত সিএ শংসাপত্র রয়েছে। ডেবিয়ান / উবুন্টুতে এটি চালিয়ে অর্জন করা যায়:

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-configration.html


কেবল এটিই সঠিক উত্তর নয়, এটি সর্বাধিক বিস্তারিত এবং সুরক্ষিত। যদি আপনি এসএসএলটিতে কোনও সতর্কতা পান তবে আপনার এটিকে কখনও এড়ানো উচিত নয় (স্যান্ডবক্স এবং স্থানীয় ইনস্টলেশন ব্যতীত)। আপনি আমাকে একটি কুবেরনেটস কিকলাক 9.0.2 ক্লাস্টারের অ্যাজুরি মাইএসকিউএলে সংযুক্ত করার জন্য সঠিক সমাধানের দিকে লক্ষ্য করেছেন। অনেক ধন্যবাদ!
আইক্কো

10

আপনাকে আপনার এমএসকিএল পাথটি এভাবে ব্যবহার করতে হবে:

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

9

এটি আমার পক্ষে ঠিক ছিল:

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

9

মাইএসকিউএল এর সাথে সংযোগ স্থাপনের সময় মুরগির সমস্যা সমাধান করতে এটি ব্যবহার করুন

<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 মাতৃক-সাইট.xml নিয়ে কাজ করে এটি হিসাবে চিহ্নিত করব।
আরিফ মোস্তফা

7

আমি কনফিগার এক্সএমএলে হাইবারনেটের জন্য এই সম্পত্তিটি ব্যবহার করি

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

সার্ভারটাইমজোন = ইউটিসি ছাড়াই - এটি কাজ করে না


4

সমাধান এটি সমাধানের জন্য, মাইএসকিউএল সংযোগ স্ট্রিংয়ের শেষে একটি ব্যবহার এসএসএল = মিথ্যা যুক্ত করুন:

প্রাক্তন।

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

মাইএসকিএল-সংযোজকের নতুন সংস্করণগুলি ডিফল্টরূপে এসএসএল সংযোগ স্থাপন করে ... এটি সমাধানের জন্য:

মাইএসকিএল -সংযোজকের পুরানো সংস্করণ যেমন মাইএসকিএল -সংযোগকারী- জাভা ৫৫.০.৮. জিপ ডাউনলোড করুন

। । বা। । উইন্ডোজের জন্য ওপেনএসএসএল ডাউনলোড করুন এবং এটি কীভাবে সেট করবেন সেই নির্দেশাবলী অনুসরণ করুন


0

যেহেতু আমি বর্তমানে ডেভলপমেন্ট মোডে আছি আমি এসএমএসএল টমক্যাট নয় বরং মাইএসকিএল সার্ভার কনফিগারেশনে নম্বরে সেট করেছিলাম। অ্যাক্সেস সেটিংস পরিচালনা করতে গিয়েছিলেন work ওয়ার্কবেঞ্চ থেকে সার্ভার সংযোগগুলি পরিচালনা করুন -> আমার সংযোগটি নির্বাচন করা হয়েছে। অভ্যন্তর সংযোগ ট্যাবটি এসএসএল ট্যাবে গিয়ে সেটিংস অক্ষম করে। আমার জন্য কাজ করেছেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.