ค้นหาเว็บไซต์

วิธีการตั้งค่า HTTPS (ใบรับรอง SSL) เพื่อรักษาความปลอดภัยการเข้าสู่ระบบ PhpMyAdmin


เพื่อแนะนำเคล็ดลับนี้ เรามาดูการรับส่งข้อมูล HTTP ระหว่างเครื่องไคลเอนต์และเซิร์ฟเวอร์ Debian 8 ซึ่งเราทำผิดพลาดโดยไม่ได้ตั้งใจในการเข้าสู่ระบบโดยใช้ข้อมูลรับรองของผู้ใช้รูทฐานข้อมูลในบทความล่าสุดของเราที่: การเปลี่ยนแปลงและการรักษาความปลอดภัย URL เข้าสู่ระบบ PhpMyAdmin เริ่มต้น

ดังที่เราได้กล่าวไว้ในเคล็ดลับก่อนหน้านี้ อย่าพยายามทำเช่นนี้หากคุณไม่ต้องการเปิดเผยข้อมูลประจำตัวของคุณ เพื่อเริ่มต้นการดมกลิ่นการจราจร เราพิมพ์คำสั่งต่อไปนี้แล้วกด Enter:

tcpdump port http -l -A | egrep -i 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user ' --line-buffered -B20

เราใช้เวลาไม่นานในการตระหนักว่า ชื่อผู้ใช้ และ รหัสผ่าน ถูกส่งผ่านทางสายในรูปแบบข้อความธรรมดา ดังที่คุณเห็นในเอาต์พุตที่ถูกตัดทอนของ tcpdump ใน ภาพด้านล่าง

โปรดทราบว่าเราได้ซ่อนส่วนหนึ่งของรหัสผ่าน root โดยมีเครื่องหมายสีน้ำเงินอยู่ด้านบน:

เพื่อหลีกเลี่ยงปัญหานี้ เรามารักษาความปลอดภัยหน้าเข้าสู่ระบบด้วยใบรับรองกันดีกว่า ในการดำเนินการนี้ ให้ติดตั้งแพ็คเกจ mod_ssl บนการกระจายแบบ CentOS

yum install mod_ssl

แม้ว่าเราจะใช้เส้นทางและชื่อ Debian/Ubuntu แต่ขั้นตอนเดียวกันนี้ใช้ได้กับ CentOS และ RHEL หากคุณแทนที่คำสั่งและเส้นทางด้านล่าง เทียบเท่ากับ CentOS

สร้างไดเร็กทอรีเพื่อจัดเก็บคีย์และใบรับรอง:

mkdir /etc/apache2/ssl    [On Debian/Ubuntu based systems]
mkdir /etc/httpd/ssl      [On CentOS based systems]

สร้างคีย์และใบรับรอง:

----------- On Debian/Ubuntu based systems ----------- 
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

----------- On CentOS based systems ----------- 
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl/apache.key -out /etc/httpd/ssl/apache.crt
ผลลัพธ์ตัวอย่าง
........................+++
.....................................................+++
writing new private key to '/etc/httpd/ssl/apache.key'
-----
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]:IN
State or Province Name (full name) []:Maharashtra
Locality Name (eg, city) [Default City]:Mumbai
Organization Name (eg, company) [Default Company Ltd]:TecMint
Organizational Unit Name (eg, section) []:TecMint
Common Name (eg, your name or your server's hostname) []:TecMint
Email Address []:[email 

ถัดไป ตรวจสอบคีย์และใบรับรอง

cd /etc/apache2/ssl/   [On Debian/Ubuntu based systems]
cd /etc/httpd/ssl/     [On CentOS based systems]
ls -l

total 8
-rw-r--r--. 1 root root 1424 Sep  7 15:19 apache.crt
-rw-r--r--. 1 root root 1704 Sep  7 15:19 apache.key

ใน Debian/Ubuntu ตรวจสอบให้แน่ใจว่า Apache กำลังฟังบนพอร์ต 443 สำหรับไซต์เริ่มต้น (/etc/apache2/sites- available/000-default.conf) และเพิ่ม 3 บรรทัดที่เกี่ยวข้องกับ SSL ภายในการประกาศ VirtualHost:

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key

ในการแจกแจงตาม CentOS ให้สั่ง Apache ให้ฟังบนพอร์ต 443 และมองหาคำสั่ง Listen ใน /etc/httpd/conf/ httpd.conf และเพิ่มบรรทัดด้านบนด้านล่าง

SSLEngine on
SSLCertificateFile /etc/httpd/ssl/apache.crt
SSLCertificateKeyFile /etc/httpd/ssl/apache.key

บันทึกการเปลี่ยนแปลง โหลดโมดูล SSL Apache บนการกระจาย Debian/Ubuntu (ใน CentOS โมดูลนี้จะโหลดโดยอัตโนมัติเมื่อคุณติดตั้ง mod_ssl แข็งแกร่ง> ก่อนหน้า):

a2enmod ssl

บังคับให้ phpmyadmin ใช้ SSL ตรวจสอบให้แน่ใจว่าบรรทัดต่อไปนี้ปรากฏใน /etc/phpmyadmin/config.inc.php หรือ / ไฟล์ etc/phpMyAdmin/config.inc.php:

$cfg['ForceSSL'] = true;

และรีสตาร์ทเว็บเซิร์ฟเวอร์:

systemctl restart apache2   [On Debian/Ubuntu based systems]
systemctl restart httpd     [On Debian/Ubuntu based systems]

จากนั้น เปิดเว็บเบราว์เซอร์ของคุณแล้วพิมพ์ https:///my (เรียนรู้วิธีเปลี่ยน URL เข้าสู่ระบบ PhpMyAdmin) ดังที่แสดงด้านล่าง

สำคัญ: โปรดทราบว่าเป็นเพียงการบอกว่าการเชื่อมต่อไม่ปลอดภัยเนื่องจากเราใช้ใบรับรองที่ลงนามด้วยตนเอง คลิกที่ ขั้นสูง และยืนยันข้อยกเว้นด้านความปลอดภัย:

หลังจากยืนยันข้อยกเว้นด้านความปลอดภัย และก่อนเข้าสู่ระบบ เรามาเริ่มตรวจสอบการรับส่งข้อมูล HTTP และ HTTPS กันดีกว่า:

tcpdump port http or port https -l -A | egrep -i 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user ' --line-buffered -B20

จากนั้นเข้าสู่ระบบโดยใช้ข้อมูลประจำตัวเดียวกันกับก่อนหน้านี้ นักดมกลิ่นการจราจรจะจับคำพูดที่ไม่มีความหมายได้ดีที่สุดเท่านั้น:

เพียงเท่านี้ ในบทความถัดไป เราจะแชร์ให้คุณจำกัดการเข้าถึง PhpMyAdmin ด้วยชื่อผู้ใช้/รหัสผ่าน จนกว่าจะคอยติดตาม Tecmint