ป้องกันความปลอดภัย ด้วย TLS สำหรับ Apache บน Centos 7

บทนำ
TLS ย่อมากจาก “Transport layer Security” เพื่อรองรับการสื่อสาร ระหว่าง webserver และ client ให้มีความปลอดภัย โดยการใช้ระบบ certificate เพื่อเป็นการยืนยันว่า server เป็น server ที่ client ต้องการติดต่อด้วยจริง การใช้งานสามารถใช้งาน self-signed certificate หรือ certificate ที่ยืืนยันตนเอง ถึงแม้วิธีนี้จะไม่ได้ยืนยันจาก ผู้ให้การรับรอง (Trusted cerfificate authorities) แต่ก็สามารถใช้สำหรับการเข้ารหัสการสื่อสารได้

1 ติดตั้งโปรแกรม

sudo yum install https mod_ssl
sudo systemctl enable httpd.service
sudo systemctl start httpd.service

2 สร้าง Certificate
หลังจากการติดตั้งแล้ว ให้ทำการสร้าง certificate ด้วยการสร้าง directory สำหรับเก็บ certificate ที่สร้างขึ้น โดยตั้งชื่อ certificate ว่า “apache.crt” และ key ชื่อ “apache.key” คำสั่งที่ใช้ในการสร้าง คือ openssl

sudo mkdir /etc/httpd/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl/apache.key -out /etc/httpd/ssl/apache.crt

ตอบคำถามระหว่างการสร้าง certificate

Country Name (2 letter code) [XX]:TH
State or Province Name (full name) []:Bangkok
Locality Name (eg, city) [Default City]:Bangkok
Organization Name (eg, company) [Default Company Ltd]:ITBAKERY 
Organizational Unit Name (eg, section) []:WEB
Common Name (eg, your name or your server's hostname) []:web.example.com
Email Address []:info@example.com

# ls -l /etc/httpd/ssl/
total 8
-rw-r--r--. 1 root root 1424 Nov  1 18:02 apache.crt
-rw-r--r--. 1 root root 1704 Nov  1 18:02 apache.key

3 สรุป options ของคำสั่ง openssl

req -x509: ระบุประเภทของ certificate ที่ต้องการคือ x509 รองรับมาตรฐาน public key infrastructure ที่ใช้สำหรับ ssl, tls เป็นการทำงานร่วมกันระหว่าง key และ certificate
-nodes: ยกเลิกการใช้ passphrase ของ key ที่สร้างขึ้น
-days 365: อายุของ certificate ที่สร้างขึ้น
-newkey rsa:2048: ขนาดความยาวของ key ที่สร้างขึ้น ให้มีขนาด 2048bit
-keyout: ระบุชื่อของ private key ที่สร้างขั้น
-out: ระบุชื่อ certificate

4 ตั้งค่า VirtualHost สำหรับการใช้ cert
ไฟล์ /etc/httpd/conf.d/ssl.conf มีอยู่แล้ว

sudo vi /etc/httpd/conf.d/ssl.conf

4.1 uncomment บรรทัด DocumentRoot

grep -n "DocumentRoot" /etc/httpd/conf.d/ssl.conf
59:#DocumentRoot "/var/www/html"

DocumentRoot "/var/www/example.com/public_html"

4.2 uncomment บรรทัด ServerName

grep -n ServerName /etc/httpd/conf.d/ssl.conf 
60:#ServerName www.example.com:443

ServerName www.example.com:443

4.3 แก้ไขตำแหน่ง/ชื่อของ key และ certificate

grep -n SSLCertificateFile  /etc/httpd/conf.d/ssl.conf
100:SSLCertificateFile /etc/pki/tls/certs/localhost.crt

แก้เป็น
SSLCertificateFile /etc/httpd/ssl/apache.crt

rep -n SSLCertificateKeyFile  /etc/httpd/conf.d/ssl.conf
107:SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

แก้เป็น
SSLCertificateKeyFile /etc/httpd/ssl/apache.key

5 เริ่มต้นการใช้ cert ด้วยการ restart apache

sudo apachectl restart

การทดสอบ
ตรวจสอบ ip ของ eth0

ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1

192.168.121.14

เพิ่ม www.example.com ใน /etc/hosts

echo "192.168.121.14 www.example.com"  >> /etc/hosts

selection_023

ให้กดยอมรับ ADVANDCED จะได้ว่า
selection_025

Posted in linux.