สร้าง Self-signed SSL เพื่อทดสอบ
Table of Contents
สร้าง Self-signed SSL เพื่อทดสอบ เราจะต้องมีการติดตั้ง Apache ก่อนจะใช้คำสั่งเพื่อเปิดการทำงาน คำสั่งในการติดตั้ง ใช้คำสั่ง apt แต่ก่อนติดตั้ง Apache ต้องใช้คำสั่ง update ก่อนเพื่อจัดสารบบของ package
sudo apt update
ติดตั้ง Apache
susudo apt install apache2
เปิดการใช้งาน mod_ssl
ก่อนจะใช้งานใบรับรอง TLS ต้องเปิด โมดูล mod_ssl ก่อน เป็น โมดูลของ apache เพื่อรองรับการเข้ารหัส SSL
โดยการใช้คำสั่ง
sudo a2enmod ssl
sudo systemctl restart apache2
Warning, Tip, Notice, or Information.
การสร้างใบรับรองด้วยตนเองเจตนาเพื่อทดสอบระบบหรือต้องการทำอะไรสักอย่างที่เป็นการใช้งานผ่าน https:// ระหว่าง Server ของเรากับเครื่องของผู้ใช้ มันไม่ใช่เป็นการเข้ารหัสที่น่าเชื่อถือได้ ดังนั้นเมื่อเราเปิดบราวเซอร์ขึ้นมาและเรียกการใช้งาน บางทีเราจะเห็นว่ามีการแจ้งข้อผิดพลาด ขึ้นมาเพื่อเปิดหน้าเว็บไซต์ที่เก็บไว้ใน Server ของเรา
การสร้างใบรับรอง TLS
ในการสร้าง คีย์ของ TLS และข้อมูลที่รับรอง เรียกใช้คำสั่ง openssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
เมื่อเรียกใช้คำสั่งดังกล่าว จะมีคำถามให้เราตอบหรือใส่รายละเอียดข้อมูลเกี่ยวกับเว็บไซต์ของเรา ดังนั้นในความคิดเห็นส่วนตัวคิดว่า น่าจะวางโครงที่จะกำหนดไว้ให้เรียบร้อย เช่นชื่อโดเมน ไอพีที่เราจะใช้ ส่วนคำสั่งนั้นมีสวนประกอบดังนี้
openssl
: This is the command line tool for creating and managing OpenSSL certificates, keys, and other files.req -x509
: This specifies that we want to use X.509 certificate signing request (CSR) management. X.509 is a public key infrastructure standard that TLS adheres to for key and certificate management.-nodes
: This tells OpenSSL to skip the option to secure our certificate with a passphrase. We need Apache to be able to read the file, without user intervention, when the server starts up. A passphrase would prevent this from happening, since we would have to enter it after every restart.-days 365
: This option sets the length of time that the certificate will be considered valid. We set it for one year here. Many modern browsers will reject any certificates that are valid for longer than one year.-newkey rsa:2048
: This specifies that we want to generate a new certificate and a new key at the same time. We did not create the key that is required to sign the certificate in a previous step, so we need to create it along with the certificate. Thersa:2048
portion tells it to make an RSA key that is 2048 bits long.-keyout
: This line tells OpenSSL where to place the generated private key file that we are creating.-out
: This tells OpenSSL where to place the certificate that we are creating.
Country Name (2 letter code) [XX]:TH
State or Province Name (full name) []:Example
Locality Name (eg, city) [Default City]:Example
Organization Name (eg, company) [Default Company Ltd]:Example Inc
Organizational Unit Name (eg, section) []:Example Dept
Common Name (eg, your name or your server's hostname) []:your_domain_or_ip
Email Address []:webmaster@example.com
ปรับแต่ง Apache เพื่อใช้งาน TLS
ตอนนี้ เท่ากับว่ารามีใบรับรองและมีคีย์ที่สามารถใช้ได้แล้ว ตามที่เรากำหนดขึ้นมาด้วยตัวเอง ต่อไปเป็นการปรับแต่ง Apache เพื่อให้สามารถใช้งานค่าต่างๆๆ ที่เราสร้างขึ้นมาในได้
การปรับแต่งค่า Apache นั้น ตรงไฟล์คอนฟิกที่มีนามสกุล .conf นั้น ตามตัวอย่างชื่อ your_domain_or_ip.conf ให้เราเปลี่ยนเป็นชื่อเราเองที่เราต้องการตั้งขึ้นมา
ในกรณีที่เรายังไม่ได้สร้าง ส่วนมากจะใช้วิธีการตามที่เขาแนะนำ คือสร้างไฟล์ขึ้นมา แล้วคัดลอกในส่วนข้อมูลด้านล่างลงไป พร้อมกับแก้ไขค่าต่างๆๆ เช่น พวก Ip หรือ โดเมน ให้เป็นของเราเอง
sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf
<VirtualHost *:443>
ServerName your_domain_or_ip
DocumentRoot /var/www/your_domain_or_ip
SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
</VirtualHost>
ส่วนที่เราต้องแก้ไขเป็นของตัวเองให้ดูตรงบันทัด
ServerName กับ DocumentRoot
ServerName คือชื่อ โดเมนเนมของเราหรือไม่เป็นหมายเลขไอพีของเรา
DocumentRoot คือส่วนที่เก็บข้อมูลเว็บไซต์ของเราว่า เราเก็บไว้ในส่วนไหนของ Server มีการแก้ไขหรือไม่ อย่างไร
หากทดสอบตามบทความนี้ แล้วยังไม่ได้สร้างพื้นที่สำหรับเก็บข้อมูลเว็บไซต์ อาจจะสร้างใหม่ได้ตามคำสั่งนี้
sudo mkdir /var/www/your_domain_or_ip
ลองสร้างหน้าเว็บไซต์ที่เป็นหน้าสำหรับเรียกการใช้งานตัวแรก ที่เรียกว่า index.html
sudo nano /var/www/your_domain_or_ip/index.html
คัดลอกข้อความข้างล่างแล้วเอาไปวาง (ในขั้นตอนนี้ ถ้าใครมีเว็บที่สร้างไว้แล้ว แทบไม่ต้องทำอะไรเลย แก้ไขค่า ServerName กับ DocumentRoot อย่างเดียว)
<h1>it worked!</h1>
เปิดการใช้งานค่าคอนฟิกที่เราเพิ่งสร้างขึ้นมาใหม่ (จำไว้นะครับ ถ้าไม่เปิดตัวนี้ มันจะเรียกใช้ตัวคอนฟิกเก่าที่เป็นค่าดีฟอลต์ของ Apache หลังจากติดตั้งเสร็จใหม่ๆๆ )
sudo a2ensite your_domain_or_ip.conf
ตรวจสอบว่าค่าที่เราปรับแต่งถูกต้องหรือไม่ หรือมีการพิมพ์ค่าต่างๆๆ ผิดหรือเปล่า ใช้คำสั่งนี้
sudo apache2ctl configtest
หากค่าแจ้งว่ามีปัญหาเกี่ยวกับการตั้งค่า ServerName
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK
หากเราต้องการไม่ให้ข้อความแจ้งนั้นมาโชว์เพื่อตัดความสำคาญ สามารถแก้ได้ง่ายโดยการใช้คำสั่ง
sudo vi /etc/apache2/apache2.conf
แล้วเข้าไปแก้ไขค่า ServerName ในไฟลดังกล่าว ให้เป้น 127.0.1.1 แล้วใช้คำสั่งทดสอบอีกครั้งว่า ยังแจ้งข้อผิดพลาดไหม
หากไม่แจ้งแล้วและมีคำว่า Ok
ให้ใช้คำสั่งเพื่อ เรียกค่าอีกครั้งอีก (reload)
sudo systemctl reload apache2
เป็นอันว่าเสร็จเรียบร้อย
แต่. อันนี้แค่แนวทางต้องลงมือทำจริง และอย่ายึดถือเอาบทความนี้เป็นหลัก
ในการใช้งานระบบ linux มีการ ปรับแต่งได้หลายรูปแบบ และบางครั้งการเรียกใช้คำสั่ง จะไม่มีการตายตัวเหมือนระบบปิด
ให้ทำความเข้าใจแนวทาง แต่ละขั้นตอนแล้วหาข้อมูลจากเว็บไซต์อื่นเพิ่มเติม แต่ให้เข้าใจโครงสร้างแต่ละขั้นตอนให้ได้ก่อน
สรุปคือ อย่ายึดถือตามคำแนะนำในเว็บนี้เว็บเดียว ให้ศึกษาและทดลองทำจากเว็บไซต์อื่นด้วย จะดีมากที่สุ