কম্পিউটার

লিনাক্সে মাইএসকিউএল সার্ভার এবং ক্লায়েন্টের জন্য কীভাবে SSL সেটআপ করবেন


এই টিউটোরিয়ালে, আমি ব্যাখ্যা করব – কীভাবে এনক্রিপশনের জন্য একটি SSH সংযোগ ব্যবহার করে MySQL সার্ভারে একটি নিরাপদ সংযোগ সেট আপ করতে হয় যাতে ডাটাবেসের ডেটা নিরাপদে থাকে এবং হ্যাকারদের পক্ষে ডেটা চুরি করা অসম্ভব। SSL সার্টিফিকেট যাচাই করতে ব্যবহৃত হয় যা ফিশিং আক্রমণ থেকে রক্ষা করতে পারে। এটি আপনাকে দেখাবে – কিভাবে MySQL সার্ভারেও SSL সক্ষম করতে হয়।

SSL সমর্থন সক্রিয় করা হচ্ছে

MySQL সার্ভারের সাথে সংযোগ করুন এবং MySQL সার্ভারের SSL স্থিতি পরীক্ষা করুন

# mysql -u root -p
mysql> show variables like '%ssl%';
Output:
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_openssl | DISABLED  |
| have_ssl     |  DISABLED |
| ssl_ca       |           |
| ssl_capath   |           |
| ssl_cert     |           |
| ssl_cipher   |           |
| ssl_key      |           |
+---------------+----------+
7 rows in set (0.00 sec)
mysql> \q
Bye

MySQL এর জন্য SSL সার্টিফিকেট তৈরি করা হচ্ছে

সার্টিফিকেট ফাইল সংরক্ষণ করার জন্য একটি ডিরেক্টরি তৈরি করুন

# mkdir /etc/certificates
# cd /etc/certificates

সার্ভার সার্টিফিকেট তৈরি করা হচ্ছে

# openssl genrsa 2048 > ca-key.pem
Generating RSA private key, 2048 bit long modulus
...................................................................................+++
..........+++
e is 65537 (0x10001)
# openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem
Generating a 2048 bit RSA private key
..................+++
..............................................................................................+++
writing new private key to 'server-key.pem'
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
# openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
Signature ok
subject=/C=XX/L=Default City/O=Default Company Ltd
Error opening CA Certificate ca-cert.pem
139991633303368:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('ca-cert.pem','r')
139991633303368:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
unable to load certificate
Generating client certificates

# openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem
Generating a 2048 bit RSA private key
...............................................+++
.................+++
writing new private key to 'client-key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:
Please enter the following 'extra' attributes openssl x509 -req -in client-req.pem -days 1000 -CA ca-# cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
Signature ok
subject=/C=XX/L=Default City/O=Default Company Ltd
Error opening CA Certificate ca-cert.pem
140327140685640:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('ca-cert.pem','r')
140327140685640:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
unable to load certificate to be sent with your certificate request
A challenge password []:
An optional company name []:

এখন my.cnf ফাইলটি খুলুন এবং সার্টিফিকেট যোগ করুন

# vi /etc/my.cnf
[mysqld]
ssl-ca=/etc/certificates/cacert.pem
ssl-cert=/etc/certificates/server-cert.pem
ssl-key=/etc/certificates/server-key.pem

MySQL সার্ভার পুনরায় চালু করুন এবং শংসাপত্রের স্থিতি পরীক্ষা করুন

#service mysqld restart
#mysql -uroot -p
mysql>show variables like '%ssl%';
+---------------+-----------------------------------+
| Variable_name |        Value                      |
+---------------+-----------------------------------+
| have_openssl  |          YES                      |
| have_ssl      |          YES                      |
| ssl_ca        |/etc/certificates/cacert.pem       |
| ssl_capath    |                                   |
| ssl_cert      | /etc/certificates/server-cert.pem |
| ssl_cipher    |                                   |
| ssl_key       | /etc/certificates/server-key.pem  |
+---------------+-----------------------------------+
7 rows in set (0.00 sec)

SSL অ্যাক্সেস সহ ব্যবহারকারী তৈরি করা

mysql> GRANT ALL PRIVILEGES ON *.* TO ‘ssl_user’@’%’ IDENTIFIED BY ‘password’ REQUIRE SSL;
mysql> FLUSH PRIVILEGES;

MySQL ক্লায়েন্টের জন্য SSL কনফিগার করুন

সার্ভারের দিক থেকে আমাদের ক্লায়েন্ট-cert.pem client-key.pem client-req.pem সার্ভার থেকে ক্লায়েন্টে কপি করতে হবে।

# scp /etc/ certificates/client-cert.pem root@192.168.87.158:/etc/certificates
# scp /etc/ certificates/client-key.pem root@192.168.87.158:/etc/certificates
# scp /etc/ certificates/client-req.pem root@192.168.87.158:/etc/certificates

একবার ক্লায়েন্টে স্থানান্তরিত ফাইলগুলি ক্লায়েন্টের সাথে সংযুক্ত হয়ে গেলে এবং SSL শংসাপত্র ব্যবহার করে MySQL এর সাথে সংযোগ করার চেষ্টা করুন৷

# mysql --ssl-ca=ca-cert.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem -h 192.168.87.156 -u ssluser -p
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.1.73 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> status
--------------
mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1
Connection id: 3
Current database:
Current user: root@localhost
SSL: Clipher in use is DHE-RSA-AES256-SHA
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.1.73 Source distribution
Protocol version: 10
Connection: 192.168.87.158 via TCP/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 11 min 13 sec
Threads: 1 Questions: 8 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 0.11
-------------

পরে, স্থায়ীভাবে /etc/my.cnf ফাইলে সেটিংস যোগ করুন যাতে আমরা যখন MySQL সার্ভারের সাথে সংযোগ করি তখন আমরা SSL ব্যবহার করে সংযোগ করতে পারি।

# vi /etc/my.cnf
[client]
ssl-ca=/etc/certificates/ client-cert.pem
ssl-cert=/etc/certificates/client-cert.pem
ssl-key=/etc/certificates/client-key.pem

এই কনফিগারেশনের পরে এবং এখন সেট আপ করার পরে আপনি SSL কী ব্যবহার করে ক্লায়েন্ট সাইড থেকে MySQL সার্ভারের সাথে সংযোগ করতে সক্ষম হবেন যাতে ডেটা চুরি করা থেকে ডেটা রক্ষা করা যায় এবং যা হ্যাকারদের থেকে ডেটা সুরক্ষিত করে৷


  1. ম্যালওয়্যার এবং রুটকিটের জন্য কীভাবে একটি লিনাক্স সার্ভার স্ক্যান করবেন

  2. লিনাক্স সার্ভারে উচ্চ ট্র্যাফিক ওয়েবসাইটগুলির জন্য অ্যাপাচি এবং পিএইচপি কীভাবে কনফিগার করবেন

  3. কিভাবে Windows 10 এ TFTP সার্ভার সেটআপ এবং কনফিগার করবেন

  4. কিভাবে উইন্ডোজ 10 এ একটি FTP সার্ভার সেটআপ এবং পরিচালনা করবেন?