Mr.Green

สร้าง บันทึกและแบ่งปัน

พิมพ์ค้นหาบทความได้ในช่องค้นหา

สร้าง Self-signed SSL เพื่อทดสอบ

สร้าง 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. The rsa: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 มีการ ปรับแต่งได้หลายรูปแบบ และบางครั้งการเรียกใช้คำสั่ง จะไม่มีการตายตัวเหมือนระบบปิด

ให้ทำความเข้าใจแนวทาง แต่ละขั้นตอนแล้วหาข้อมูลจากเว็บไซต์อื่นเพิ่มเติม แต่ให้เข้าใจโครงสร้างแต่ละขั้นตอนให้ได้ก่อน

สรุปคือ อย่ายึดถือตามคำแนะนำในเว็บนี้เว็บเดียว ให้ศึกษาและทดลองทำจากเว็บไซต์อื่นด้วย จะดีมากที่สุ

Tags:  ,

Leave a Reply

Your email address will not be published. Required fields are marked *