วิธีการติดตั้ง SSL สำหรับ MySQL เซิร์ฟเวอร์และไคลเอ็นต์บน Linux

A+ A-

ในการกวดวิชานี้ผมจะอธิบายเกี่ยวกับ - วิธีการตั้งค่าการเชื่อมต่อที่ปลอดภัยไปยัง MySQL เซิร์ฟเวอร์ใช้การเชื่อมต่อ SSH สำหรับการเข้ารหัสเพื่อให้ข้อมูลในฐานข้อมูลจะอยู่ในที่ปลอดภัยและที่เป็นไปไม่ได้สำหรับแฮกเกอร์ที่จะขโมยข้อมูล SSL จะใช้ในการตรวจสอบวิธีการของใบรับรอง SSL ซึ่งสามารถป้องกันการโจมตีแบบฟิชชิ่ง นอกจากนี้ยังจะแสดงให้คุณ - วิธีการเปิดใช้งาน SSL บนเซิร์ฟเวอร์ MySQL ยัง

การเปิดใช้งานการสนับสนุน SSL

เชื่อมต่อกับเซิร์ฟเวอร์ MySQL และตรวจสอบว่าสถานะ SSL ของเซิร์ฟเวอร์ MySQL

 # MySQL -u -p ราก
MySQL> แสดงตัวแปรเช่น '% SSL%';
เอาท์พุท: 
 + --------------- + + ----------
| VARIABLE_NAME | ราคา |
+ --------------- + + ----------
| have_openssl | พิการ |
| have_ssl | พิการ |
| ssl_ca | |
| ssl_capath | |
| ssl_cert | |
| ssl_cipher | |
| ssl_key | |
+ --------------- + + ----------
7 แถวในชุด (0.00 วินาที)
MySQL> \ Q
บาย 

สร้างใบรับรอง SSL สำหรับ MySQL

สร้างไดเรกทอรีสำหรับจัดเก็บไฟล์ใบรับรอง

 # mkdir / etc / ใบรับรอง
# cd / etc / ใบรับรอง 

ใบรับรองผลิตเซิร์ฟเวอร์

 # OpenSSL genrsa 2048> CA-key.pem
สร้างคีย์ส่วนตัว RSA โมดูลัส 2048 ยาวไปหน่อย
.................................................. ................................. +++
.......... +++
E คือ 65,537 (0x10001)
RSA # OpenSSL req -newkey: 2048 -Days 1000 -nodes -keyout เซิร์ฟเวอร์ key.pem> เซิร์ฟเวอร์ req.pem
สร้าง 2048 บิต RSA คีย์ส่วนตัว
.................. +++
.................................................. ............................................ +++
เขียนคีย์ส่วนตัวใหม่ที่จะ 'เซิร์ฟเวอร์ key.pem'
คุณกำลังจะถูกขอให้ป้อนข้อมูลที่จะถูกรวม
คำขอใบรับรองของคุณ
สิ่งที่คุณกำลังจะเข้าคือสิ่งที่เรียกชื่อเฉพาะหรือ DN
มีค่อนข้างเล็กน้อย แต่คุณสามารถปล่อยว่างเปล่าบางคน
สำหรับบางสาขาจะมีค่าเริ่มต้น
หากคุณป้อน '.' สนามจะถูกทิ้งให้ว่างเปล่า
-----
ชื่อประเทศ (2 รหัสตัวอักษร) [XX]:
ชื่อรัฐหรือจังหวัด (ชื่อเต็ม) []:
ถิ่นที่ชื่อ (เช่นเมือง) [ค่าเริ่มต้นเมือง]:
ชื่อองค์กร (เช่น บริษัท ) [ค่าเริ่มต้น บริษัท Ltd]:
ชื่อหน่วยองค์กร (เช่นส่วน) []:
ชื่อสามัญ (เช่นชื่อหรือชื่อโฮสต์ของเซิร์ฟเวอร์ของคุณ) []:
ที่อยู่อีเมล []:
กรุณากรอกต่อไปนี้แอตทริบิวต์ 'พิเศษ'
จะถูกส่งไปพร้อมกับคำขอใบรับรองของคุณ
รหัสผ่านความท้าทาย []:
ชื่อ บริษัท ตัวเลือก []:

 # OpenSSL x509 -req -in เซิร์ฟเวอร์ req.pem -Days 1000 -CA CA-cert.pem -CAkey CA-key.pem -set_serial 01> เซิร์ฟเวอร์ cert.pem
ตกลงลายเซ็น
เรื่อง = / C = XX / L = เริ่มต้นที่เมือง / o = เริ่มต้น บริษัท Ltd
ข้อผิดพลาดในการเปิดใบรับรอง CA CA-cert.pem
139991633303368: ระบบห้องสมุด: ข้อผิดพลาด: 02001002 fopen: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว: bss_file.c: 398: fopen (CA-cert.pem ',' R ')
139991633303368: ข้อผิดพลาด: 20074002: กิจวัตร BIO: FILE_CTRL: ระบบ lib: bss_file.c: 400:
ไม่สามารถโหลดใบรับรอง
สร้างใบรับรองไคลเอ็นต์

 # OpenSSL req -newkey RSA: 2048 -Days 1000 -nodes -keyout ลูกค้า key.pem> ลูกค้า req.pem
สร้าง 2048 บิต RSA คีย์ส่วนตัว
............................................... +++
................. +++
เขียนคีย์ส่วนตัวใหม่ที่ 'ลูกค้า key.pem'
-----
คุณกำลังจะถูกขอให้ป้อนข้อมูลที่จะถูกรวม
คำขอใบรับรองของคุณ
สิ่งที่คุณกำลังจะเข้าคือสิ่งที่เรียกชื่อเฉพาะหรือ DN
มีค่อนข้างเล็กน้อย แต่คุณสามารถปล่อยว่างเปล่าบางคน
สำหรับบางสาขาจะมีค่าเริ่มต้น
หากคุณป้อน '.' สนามจะถูกทิ้งให้ว่างเปล่า
-----
ชื่อประเทศ (2 รหัสตัวอักษร) [XX]:
ชื่อรัฐหรือจังหวัด (ชื่อเต็ม) []:
ถิ่นที่ชื่อ (เช่นเมือง) [ค่าเริ่มต้นเมือง]:
ชื่อองค์กร (เช่น บริษัท ) [ค่าเริ่มต้น บริษัท Ltd]:
ชื่อหน่วยองค์กร (เช่นส่วน) []:
ชื่อสามัญ (เช่นชื่อหรือชื่อโฮสต์ของเซิร์ฟเวอร์ของคุณ) []:
ที่อยู่อีเมล []:
กรุณากรอกตัวต่อไป 'พิเศษ' แอตทริบิวต์ OpenSSL x509 -req -in ลูกค้า req.pem -Days 1000 -CA CA- # cert.pem -CAkey CA-key.pem -set_serial 01> ลูกค้า cert.pem
ตกลงลายเซ็น
เรื่อง = / C = XX / L = เริ่มต้นที่เมือง / o = เริ่มต้น บริษัท Ltd
ข้อผิดพลาดในการเปิดใบรับรอง CA CA-cert.pem
140327140685640: ระบบห้องสมุด: ข้อผิดพลาด: 02001002 fopen: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว: bss_file.c: 398: fopen (CA-cert.pem ',' R ')
140327140685640: ข้อผิดพลาด: 20074002: กิจวัตร BIO: FILE_CTRL: ระบบ lib: bss_file.c: 400:
ไม่สามารถโหลดใบรับรองที่จะส่งไปพร้อมกับคำขอใบรับรองของคุณ
รหัสผ่านความท้าทาย []:
ชื่อ บริษัท ตัวเลือก []: 

ตอนนี้เปิดไฟล์ my.cnf และเพิ่มใบรับรอง

 # vi /etc/my.cnf
[mysqld]
SSL-CA = / etc / ใบรับรอง / cacert.pem
SSL-CERT = / etc / ใบรับรองเซิร์ฟเวอร์ / cert.pem
SSL-key = / etc / ใบรับรองเซิร์ฟเวอร์ / key.pem 

รีสตาร์ทเซิร์ฟเวอร์ MySQL และตรวจสอบสถานะของใบรับรอง

 #service รีสตาร์ท mysqld 
#mysql -uroot -p
MySQL> แสดงตัวแปรเช่น '% SSL%';
+ + --------------- --------------------------------- - +
| VARIABLE_NAME | ราคา |
+ + --------------- --------------------------------- - +
| 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 แถวในชุด (0.00 วินาที) 

สร้างผู้ใช้ที่มีการเข้าถึง SSL

 MySQL> ให้สิทธิ์ทั้งหมดบน * * * * * * * * ที่ 'ssl_user' @ '%' ระบุ password 'จำเป็นต้องใช้ SSL.
MySQL> สิทธิ์ล้าง; 

กำหนดค่า SSL สำหรับลูกค้า MySQL

จากฝั่งเซิร์ฟเวอร์เราจำเป็นที่จะคัดลอกลูกค้า cert.pem ลูกค้า key.pem ลูกค้า req.pem จากเซิร์ฟเวอร์ไปยังลูกค้า

 # SCP / etc / / ใบรับรองไคลเอ็นต์ cert.pem root@192.168.87.158: / etc / ใบรับรอง
# SCP / etc / / ใบรับรองไคลเอ็นต์ key.pem root@192.168.87.158: / etc / ใบรับรอง
# SCP / etc / / ใบรับรองไคลเอ็นต์ req.pem root@192.168.87.158: / etc / ใบรับรอง 

เมื่อไฟล์ที่ได้โอนให้ลูกค้าเชื่อมต่อกับลูกค้าและพยายามที่จะเชื่อมต่อกับ MySQL โดยใช้ใบรับรอง SSL

 # MySQL --ssl-CA CA-= cert.pem --ssl-CERT = ลูกค้า cert.pem --ssl คีย์ = ลูกค้า key.pem -h 192.168.87.156 -u ssluser -p
ยินดีต้อนรับสู่จอภาพ MySQL จบลงด้วยคำสั่ง; หรือ \ G
การเชื่อมต่อ MySQL ID ของคุณคือ 3
Server รุ่น: 5.1.73 กระจายแหล่งที่มา
Copyright (c) 2000 2013 ออราเคิลและ / หรือ บริษัท ในเครือ สงวนลิขสิทธิ์.
ออราเคิลเป็นเครื่องหมายการค้าจดทะเบียนของ บริษัท ออราเคิลคอร์ปอเรชั่นและ / หรือของมัน
บริษัท ในเครือ ชื่ออื่น ๆ อาจเป็นเครื่องหมายการค้าของตน
เจ้าของ
พิมพ์ 'ช่วย' หรือ '\ H' เพื่อขอความช่วยเหลือ ประเภท '\ c' เพื่อล้างคำสั่งป้อนข้อมูลปัจจุบัน
MySQL> สถานะ
--------------
MySQL Ver 14.14 Distrib 5.1.73 สำหรับ RedHat-ลินุกซ์ GNU (x86_64) โดยใช้ ReadLine 5.1
เชื่อมต่อ ID: 3
ฐานข้อมูลปัจจุบัน:
ผู้ใช้ปัจจุบัน: ราก @ localhost
SSL: Clipher ในการใช้งานเป็น DHE-อาร์เอส AES256-SHA
เพจเจอร์ปัจจุบัน: stdout
ใช้ OUTFILE: ''
โดยใช้ตัวคั่น:;
Server รุ่น: 5.1.73 กระจายแหล่งที่มา
โปรโตคอลรุ่น: 10
การเชื่อมต่อ: 192.168.87.158 ผ่าน TCP / IP
เซิร์ฟเวอร์ characterset: latin1
db characterset: latin1
characterset ลูกค้า: latin1
characterset เรือ:. latin1
ซ็อกเก็ตยูนิกซ์: /var/lib/mysql/mysql.sock
Uptime: 11 นาที 13 วินาที
หัวข้อ: 1 คำถาม: 8 คำสั่งช้า: 0 เปิด: 15 ตารางที่ฟลัช: 1 ตารางเปิด: 8 คำสั่งต่อเฉลี่ยสอง: 0.11
------------- 

ต่อมาเพิ่มการตั้งค่าในไฟล์ /etc/my.cnf เพื่อถาวรเพื่อที่ว่าเมื่อเราเชื่อมต่อกับเซิร์ฟเวอร์ MySQL เราควรจะเชื่อมต่อโดยใช้ SSL

 # vi /etc/my.cnf
[ลูกค้า]
SSL-CA = / etc / / ใบรับรองไคลเอ็นต์ cert.pem
SSL-CERT = / etc / / ใบรับรองไคลเอ็นต์ cert.pem
SSL-key = / etc / / ใบรับรองไคลเอ็นต์ key.pem 

หลังจากการกำหนดค่านี้และการตั้งค่าตอนนี้คุณจะสามารถเชื่อมต่อกับเซิร์ฟเวอร์ MySQL จากฝั่งไคลเอ็นต์ใช้คีย์ SSL เพื่อปกป้องข้อมูลจากการขโมยข้อมูลและที่ยังยึดข้อมูลจากแฮกเกอร์

Ads

หุ้น

ร้อนในสัปดาห์

เมื่อเร็ว ๆ นี้

ทางเลือกที่ดีที่สุดอูบุนตูที่มองหาถ้าคุณเป็นคนรักของลินุกซ์

ขอเริ่มต้นโดยได้รับคุ้นเคยกับบางสิ่งบางอย่าง; พื้นฐาน แต่บิ...

วิธีการเพิ่มลายเซ็นใน Gmail กล่องขาเข้า - เพิ่มลายเซ็นของ Google ใน Gmail

กล่องขาเข้าโดย Google เป็นหนึ่งในสิ่งที่ดีที่สุดของ Google ...

Weekly Tech News: Nokia, Google และนินเทน

สวัสดีครับทุกคนก็ศุกร์ 3 มีนาคมและเช่นเดียวเสมอเรากลับมาพร้...

โครงการ Pi ราสเบอร์รี่สำหรับมือใหม่ - คุณสามารถทำอะไรกับราสเบอร์รี่ Pi

ราสเบอร์รี่ Pi เป็นชุดของพลังงานต่ำคอมพิวเตอร์บอร์ดเดียวที่...

VPN ที่ดีที่สุดสำหรับ Android 2017 - วิธีการใช้ VPN ใน Android

ไปเป็นวันเมื่อ VPNs เพียงสำหรับเทคโนโลยี savvies และแฮกเกอร...

ความคิดเห็น