บทนำ
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
ให้กดยอมรับ ADVANDCED จะได้ว่า