SSL/TLS Encryption কনফিগারেশন

Security এবং Access Control - জাভা মাইএসকিউএল (Java MySQL) - Database Tutorials

286

MySQL ডেটাবেসের সাথে নিরাপদভাবে যোগাযোগ করার জন্য SSL/TLS (Secure Sockets Layer/Transport Layer Security) এনক্রিপশন ব্যবহৃত হয়। এটি ডেটাবেসের ক্লায়েন্ট এবং সার্ভারের মধ্যে সমস্ত ডেটা ট্রান্সমিশন এনক্রিপ্ট করে, যাতে ডেটা ট্রান্সমিশনের সময় ইন্টারসেপট করা বা ফাঁস হয়ে যাওয়ার সম্ভাবনা কমে যায়। Java অ্যাপ্লিকেশনগুলিতে MySQL সংযোগের জন্য SSL/TLS এনক্রিপশন কনফিগারেশন করা প্রয়োজন, বিশেষ করে যখন ডেটাবেস সার্ভার এবং ক্লায়েন্ট আলাদা মেশিনে অবস্থান করে।

এখানে দেখানো হবে কিভাবে Java ব্যবহার করে MySQL ডেটাবেসের জন্য SSL/TLS এনক্রিপশন কনফিগার করা যায়।


1. SSL/TLS কনফিগারেশন কী?

SSL/TLS প্রোটোকল দুটি মেশিনের মধ্যে ডেটা সুরক্ষা নিশ্চিত করতে ব্যবহৃত হয়, যা:

  • Encryption: সমস্ত ডেটা এনক্রিপ্ট করে যাতে সেগুলি ট্রান্সমিশনের পথে কেউ পড়তে না পারে।
  • Authentication: সার্ভার এবং ক্লায়েন্টের পরিচয় নিশ্চিত করতে সাহায্য করে।
  • Data Integrity: ডেটার সঠিকতা নিশ্চিত করে এবং ট্রান্সমিশনের সময় ডেটা পরিবর্তন হওয়া রোধ করে।

MySQL সার্ভারে SSL কনফিগারেশন করার মাধ্যমে, আপনি ডেটাবেসের ক্লায়েন্ট এবং সার্ভারের মধ্যে সুরক্ষিত সংযোগ প্রতিষ্ঠা করতে পারেন।


2. MySQL সার্ভারে SSL কনফিগারেশন

MySQL সার্ভারের জন্য SSL কনফিগার করার জন্য সার্ভার সাইডে কিছু কনফিগারেশন এবং সার্টিফিকেট জেনারেট করা প্রয়োজন।

2.1 MySQL সার্ভারে SSL চালু করা

MySQL সার্ভারে SSL চালু করার জন্য, my.cnf (বা my.ini ফাইল) কনফিগারেশনে নিচের লাইনগুলো যোগ করতে হবে।

[mysqld]
ssl-ca=/path/to/ca-cert.pem
ssl-cert=/path/to/server-cert.pem
ssl-key=/path/to/server-key.pem

এখানে:

  • ssl-ca: সার্ভারের CA (Certificate Authority) সার্টিফিকেট ফাইলের পাথ।
  • ssl-cert: সার্ভারের public certificate ফাইলের পাথ।
  • ssl-key: সার্ভারের private key ফাইলের পাথ।

2.2 সার্টিফিকেট এবং কী তৈরি করা

আপনি openssl কমান্ড ব্যবহার করে সার্টিফিকেট এবং কী জেনারেট করতে পারেন:

# Private Key তৈরি করা
openssl genpkey -algorithm RSA -out server-key.pem

# Public Key (Certificate) তৈরি করা
openssl req -new -x509 -key server-key.pem -out server-cert.pem -days 365

# CA (Certificate Authority) সার্টিফিকেট তৈরি করা
openssl req -new -x509 -key server-key.pem -out ca-cert.pem -days 365

এই সার্টিফিকেটগুলির মধ্যে:

  • server-key.pem: সার্ভারের প্রাইভেট কী।
  • server-cert.pem: সার্ভারের পাবলিক সার্টিফিকেট।
  • ca-cert.pem: সার্টিফিকেট অথোরিটির (CA) পাবলিক সার্টিফিকেট।

2.3 MySQL সার্ভার পুনরায় চালু করা

কনফিগারেশন পরিবর্তন করার পর, MySQL সার্ভার পুনরায় চালু করতে হবে।

sudo systemctl restart mysql

3. Java MySQL: SSL/TLS কনফিগারেশন

Java অ্যাপ্লিকেশন থেকে MySQL সার্ভারের সাথে SSL/TLS এনক্রিপশন ব্যবহার করতে, JDBC URL এ কিছু অতিরিক্ত প্যারামিটার যোগ করতে হবে।

3.1 JDBC URL কনফিগারেশন

JDBC URL এর মধ্যে SSL কনফিগারেশনের জন্য নিচের প্যারামিটারগুলো ব্যবহার করা হয়:

String url = "jdbc:mysql://localhost:3306/mydatabase?useSSL=true&requireSSL=true&verifyServerCertificate=true" +
             "&clientCertificateKeyStoreUrl=file:/path/to/client-keystore.jks" +
             "&clientCertificateKeyStorePassword=keystore_password" +
             "&trustCertificateKeyStoreUrl=file:/path/to/truststore.jks" +
             "&trustCertificateKeyStorePassword=truststore_password";

এখানে:

  • useSSL=true: SSL এনক্রিপশন ব্যবহার করতে হবে।
  • requireSSL=true: SSL সংযোগ নিশ্চিত করতে হবে।
  • verifyServerCertificate=true: সার্ভারের সার্টিফিকেট যাচাই করতে হবে।
  • clientCertificateKeyStoreUrl: ক্লায়েন্ট সাইডের keystore ফাইলের পাথ, যা ক্লায়েন্টের সার্টিফিকেট ধারণ করে।
  • clientCertificateKeyStorePassword: ক্লায়েন্ট কিব্যান্ডের পাসওয়ার্ড।
  • trustCertificateKeyStoreUrl: ট্রাস্টস্টোর ফাইলের পাথ, যা সার্ভারের CA সার্টিফিকেট ধারণ করে।
  • trustCertificateKeyStorePassword: ট্রাস্টস্টোরের পাসওয়ার্ড।

3.2 Java ক্লায়েন্ট সাইড SSL সার্টিফিকেট সেটআপ

Java ক্লায়েন্টের জন্য আপনাকে SSL সার্টিফিকেটের জন্য keystore এবং truststore তৈরি করতে হবে। এগুলি Java KeyStore (JKS) ফরম্যাটে হতে হবে। আপনি keytool ব্যবহার করে keystore এবং truststore তৈরি করতে পারেন।

3.2.1 Keystore তৈরি করা
keytool -genkey -keyalg RSA -alias clientkey -keystore client-keystore.jks -storepass password -validity 365
3.2.2 Truststore তৈরি করা
keytool -import -alias root -keystore truststore.jks -file ca-cert.pem -storepass password

এখানে:

  • client-keystore.jks: ক্লায়েন্টের keystore ফাইল যেখানে ক্লায়েন্ট সার্টিফিকেট থাকবে।
  • truststore.jks: সার্ভারের truststore ফাইল যেখানে সার্ভারের CA সার্টিফিকেট থাকবে।

4. Java MySQL: SSL/TLS এনক্রিপশন পরীক্ষা

Java অ্যাপ্লিকেশন থেকে SSL সংযোগ পরীক্ষা করার জন্য, নিচের কোড ব্যবহার করা যেতে পারে:

import java.sql.*;

public class MySQLSSLTest {

    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase?useSSL=true&requireSSL=true&verifyServerCertificate=true" +
                     "&clientCertificateKeyStoreUrl=file:/path/to/client-keystore.jks" +
                     "&clientCertificateKeyStorePassword=keystore_password" +
                     "&trustCertificateKeyStoreUrl=file:/path/to/truststore.jks" +
                     "&trustCertificateKeyStorePassword=truststore_password";
        String user = "root";
        String password = "password";

        try {
            Connection conn = DriverManager.getConnection(url, user, password);
            System.out.println("Connected to the database using SSL/TLS encryption!");
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

এই কোডটি পরীক্ষা করবে যে, ক্লায়েন্ট SSL সংযোগের মাধ্যমে MySQL সার্ভারের সাথে সংযুক্ত হয়েছে কিনা।


সারাংশ

MySQL ডেটাবেসের সাথে Java অ্যাপ্লিকেশনকে SSL/TLS এনক্রিপশন দিয়ে নিরাপদ করতে JDBC URL কনফিগারেশন এবং keystore এবং truststore ব্যবহার করতে হয়। MySQL সার্ভারের SSL কনফিগারেশন এবং সার্টিফিকেট সেটআপ করে ক্লায়েন্ট এবং সার্ভারের মধ্যে নিরাপদ সংযোগ স্থাপন করা সম্ভব। SSL সংযোগটি ডেটাবেসের মধ্যে ডেটা ট্রান্সমিশন নিরাপদ করে, যা আক্রমণকারী বা মধ্যবর্তী যেকোনো ব্যক্তি দ্বারা ডেটা চুরি রোধ করে।

Content added By
Promotion

Are you sure to start over?

Loading...