SSL และผู้สืบทอด TLS (Secure Sockets Layer / Transport Layer Security) เพิ่มชั้นของการเข้ารหัสระหว่างไคลเอนต์และเซิร์ฟเวอร์ หากไม่มีเทคโนโลยีนี้ข้อมูลจะถูกส่งไปยังเซิร์ฟเวอร์เป็นข้อความธรรมดาทำให้บุคคลที่สามสามารถอ่านข้อมูลทั้งหมดที่เซิร์ฟเวอร์ของคุณส่งและรับ
บทช่วยสอนนี้จะสอนวิธีสร้างใบรับรอง SSL / TLS และเปิดใช้งานบน Apache 2.4 บน Ubuntu 16.04 ฉันถือว่า Apache ติดตั้งและใช้งานแล้ว หากคุณต้องการเรียนรู้วิธีการติดตั้งสแต็ค LAMP ดูเอกสาร Vultrนี้
ความสนใจ
ปกติแล้วใบรับรอง SSL / TLS จะถูกสร้างขึ้นโดย CA ที่เชื่อถือได้ (หน่วยงานออกใบรับรอง) เมื่อสร้างด้วยตัวคุณเองคุณจะเป็นผู้ลงนามหมายความว่าเบราว์เซอร์จะไม่สามารถตรวจสอบว่าตัวตนของใบรับรองควรเชื่อถือได้หรือไม่และจะเตือนผู้ใช้ แม้ว่าจะเป็นไปได้ที่จะข้ามการแจ้งเตือนนี้ไซต์สาธารณะควรใช้ใบรับรองที่ลงนามโดย CA ที่เชื่อถือได้ Let's เข้ารหัสเป็น CA ที่ให้บริการใบรับรองฟรี คุณสามารถเรียนรู้วิธีการติดตั้งใบรับรองของพวกเขาใน Apache และ Ubuntu 16.04 ที่นี่
สำหรับแอปพลิเคชันภายในการใช้ใบรับรองที่ลงชื่อด้วยตนเองอาจใช้ได้โดยเฉพาะถ้าคุณไม่มีชื่อโดเมน
ขั้นตอนที่ 1: การสร้างใบรับรอง
-
อันดับแรกให้สร้างสถานที่จัดเก็บไฟล์
mkdir ~/certificates
cd ~/certificates
-
สร้าง CSR และรหัสส่วนตัว
openssl req -x509 -newkey rsa:4096 -keyout apache.key -out apache.crt -days 365 -nodes
มันจะขอข้อมูลสำหรับการร้องขอใบรับรอง สมบูรณ์ด้วยข้อมูลที่เหมาะสม
Country Name (2 letter code) [AU]: US
State or Province Name (full name) [Some-State]: FL
Locality Name (eg, city) []: Miami
Organization Name (eg, company) [My Company]: My Company
Organizational Unit Name (eg, section) []:
ชื่อสามัญควรเป็นชื่อโดเมนของคุณหรือที่อยู่ IP ของเซิร์ฟเวอร์ นอกจากนี้กรอกอีเมลของคุณ
Common Name (e.g. server FQDN or YOUR name) []: 203.0.113.122
Email Address []:[email protected]
-
ตอนนี้ย้ายใบรับรองไปยังโฟลเดอร์การกำหนดค่า Apache
mkdir /etc/apache2/ssl
mv ~/certificates/* /etc/apache2/ssl/.
-
ใบรับรองพร้อมแล้ว! ต่อไปเราจะเตรียม Apache ให้ทำงานกับใบรับรอง
ขั้นตอนที่ 2: การกำหนดค่าไฟร์วอลล์
-
เราต้องแน่ใจว่าพอร์ต TCP 443 เปิดอยู่ พอร์ตนี้ใช้ในการเชื่อมต่อ SSL แทนพอร์ต 80 ในบทช่วยสอนนี้เราจะใช้ UFW
-
ตรวจสอบให้แน่ใจว่าเปิดใช้งาน UFW แล้ว
sudo ufw enable
-
ตอนนี้อนุญาตการตั้งค่า Apache ที่กำหนดไว้ล่วงหน้าสำหรับไฟร์วอลล์
sudo ufw allow 'Apache Full'
-
โดยการพิมพ์ " sudo ufw status
" คุณจะเห็นรายการกฎปัจจุบัน การกำหนดค่าของคุณควรมีลักษณะเช่นนี้:
To Action From
-- ------ ----
Apache Full ALLOW Anywhere
OpenSSH ALLOW Anywhere
Apache Full (v6) ALLOW Anywhere (v6)
OpenSSH (v6) ALLOW Anywhere (v6)
-
คุณควรอนุญาตให้ OpenSSH ที่นี่สำหรับการเชื่อมต่อในอนาคต
sudo ufw allow 'OpenSSH'
ขั้นตอนที่ 3: การกำหนดค่าโฮสต์เสมือน Apache
-
นำทางไปยังไดเรกทอรีกำหนดค่าเริ่มต้นของไซต์ Apache
sudo nano /etc/apache2/sites-available/default-ssl.conf
-
ไฟล์นี้บอกเซิร์ฟเวอร์ว่าจะค้นหาใบรับรอง SSL จากที่ใด เมื่อลบความคิดเห็นแล้วควรมีลักษณะเหมือนการกำหนดค่าต่อไปนี้
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
-
แก้ไขบรรทัดนี้:
ServerAdmin [email protected]
-
เพิ่มทางด้านขวาใต้ServerAdmin
บรรทัด:
ServerName ADD_YOUR_IP_OR_DOMAIN_NAME_HERE
-
ตอนนี้แก้ไขบรรทัดเหล่านี้ด้วยที่ตั้งใบรับรองของเรา:
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
-
ไฟล์สุดท้ายของเราควรมีลักษณะเช่นนี้:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin [email protected]
ServerName 203.0.113.122
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
-
บันทึกและปิดไฟล์
ขั้นตอนที่ 4: การเปิดใช้งานโมดูล Apache SSL
-
เปิดใช้งานโมดูล SSL โดยพิมพ์:
sudo a2enmod ssl
-
ตอนนี้เปิดใช้งานไซต์ที่เราเพิ่งแก้ไข:
sudo a2ensite default-ssl.conf
-
รีสตาร์ท Apache:
sudo service apache2 restart
-
ไปที่เว็บไซต์ความปลอดภัยใหม่! เปิดในเบราว์เซอร์ของคุณ (ให้แน่ใจว่าคุณพิมพ์https: // )
https://YOUR_SERVER_IP
เบราว์เซอร์ของคุณจะเตือนคุณว่าใบรับรองไม่ถูกต้องตามที่เราคาดไว้ สิ่งนี้เกิดขึ้นเนื่องจากใบรับรองไม่ได้ลงชื่อ ทำตามขั้นตอนที่เบราว์เซอร์เสนอเพื่อไปยังไซต์ของคุณ
ขั้นตอนที่ 5: เปลี่ยนเส้นทางการรับส่งข้อมูล HTTP ทั้งหมดไปยัง HTTPS (ไม่บังคับ)
-
เปิดไฟล์โฮสต์เสมือน Apache ที่เป็นค่าเริ่มต้น:
nano /etc/apache2/sites-available/000-default.conf
-
เพิ่มบรรทัดนี้ภายใน<VirtualHost *:80>
แท็ก:
Redirect / https://YOUR_SERVER_IP_OR_DOMAIN/
-
โหลดการกำหนดค่า Apache อีกครั้ง:
sudo service apache2 reload
อัตราการเข้าชมเว็บไซต์ทั้งหมดจะเปลี่ยนเส้นทางไปยัง HTTPS โดยอัตโนมัติ