Cấu hình SSL cho Apache2 trong Ubuntu

Tóm tắt: SSL giúp website chạy được trên https thay vì http. Điều này giúp website bảo mật hơn và tăng lòng tin trên các phương tiện tìm kiếm đặc biệt là Google. Hầu hết trên các máy chủ chia sẽ (hosting share) điều có hỗ trợ. Nhưng đối với các server riêng hay VPS ta cần cấu hình nó bằng tay. Bài viết nêu từng bước để cài đặt SSL trên Ubuntu.

1. Yêu cầu

Để thiết lập được https trên website đồi hỏi ta cần phải có chứng thực SSL được cung cấp bởi một nhà cung cấp SSL nào đó. Thường thi ta cần có 2 tập tin: chứng thực trung gian do nhà cung cấp trung gian cung cấp và chứng thực SSL của domain website mà ta đang muốn xác thực. Hai tập tin này điều có phần mở rộng là .crt.

Các chứng thực cần phải được mua từ nhà cung cấp trung gian với nhiều giá khác nhau. Thông thường có 3 gói sản phẩm với các đặc điểm chính ta cần quan tâm: SSL cho 1 địa chỉ website, SSL cho domain chính của website cùng với các domain con của nó, SSL giúp hiện tên doanh nghiệp trên địa chỉ của trình duyệt.

2. SSL trong Apache2

Để bật hỗ trợ SSL trong Apache2 ta cần thực hiện dòng lệnh.

[shell]
sudo a2enmod ssl
[/shell]

Sau đó khởi động lại Apache2.

[shell]
sudo service apache2 restart
[/shell]

3. Tạo server Private key

Mỗi server chỉ cần một private key là đủ. Nó được sinh ra bơi openssl một module cần được cài đặt trong Ubuntu nếu ta chưa có.

[shell]
openssl genrsa -out /etc/httpd/ssl/sems.vn.key 2048
[/shell]

Kết quả thu được là tập tin sems.vn.key. Tên của tập tin tương ứng với domain mà ta cần xác thực là tốt nhưng đó không phải là bắt buộc.

4. Tạo CSR key

Đây là bước giúp ta nối kết private key mới vừa tạo của ta với SSL được mua từ nhà cung cấp. Khi tạo CSR key là bắt buộc ta phải có private key ở bước trên.

[shell]
openssl req -new -key /etc/httpd/ssl/sems.vn.key -out /etc/httpd/ssl/sems.vn.csr
[/shell]

Trong dòng lệnh trên /etc/httpd/ssl là thư mục để ta chứa các chứng thực ssl tạo ra và là nơi để chứa các chứng thực đã mua.

Dòng lệnh trên được thực thi thì ta cần phải trả lời 7 câu hỏi mà openssl tạo ra cho ta.

  • Country Name (2 letter code) [XX]: Mã quốc gia, là VN nếu là Việt Nam.
  • State or Province Name (full name) []: Thành phố
  • Locality Name (eg, city) [Default City]: Quận
  • Organization Name (eg, company) [Default Company Ltd]: Tên công ty, doanh nghiệp
  • Organizational Unit Name (eg, section) []: Lĩnh vực hoạt động
  • Common Name (eg, your name or your server’s hostname) []: Domain của website cần chứng thực (vd: sems.vn.com, không chứa www).
  • Email Address []: Địa chỉ Email

Sau khi thực hiện xong thì ta sẽ nhận được tập tin .csr với đoạn mã khá dài. Ta cần sao chép đoạn mã trên vào website nhà cung cấp để tạo ra các xác thực.

Lưu ý: Đây là tập tin quan trọng trong xác thực. Nếu ta muốn dùng chữ ký đó để xác thực cho domain hay server khác ta cần sinh lại nó nếu không sẽ không thành công.

5. Xác thực SSL

Mỗi nhà cung cấp điều có cách xác thực khác nhau. Song các bước tổng quan là vào website để dán đoạn mã trong tập csr đã tạo trong bước trên để họ tạo ra tập tin có đuôi mở rộng là crt. Chúng ta sẽ dùng tập tin này để cấu hình SSL trên virtual host.

Nếu ta dùng Namecheap thì vào Manage SSL Certificates ð Active Now để tiến hành kích hoạt SSL đã mua.

Chọn loại webservice để kích hoạt. Trong trường hợp này ta chọn Apache + MOD SSL vì ta đang sử dụng Apache làm webserver.

Dán đoạn mã trong tập tin csr vào trong website và nhấn Next để đi đến bước cuối cùng. Lưu ý trong quá trình nhấn Next, Namecheap sẽ hỏi email mà ta sử dụng để họ gửi về email SSLCertificate mà họ sinh ra. Cuối cùng ta sẽ nhận được tập tin xác thực SSL trong email. Sau đó sử dụng nó để cấu hình trong virtual host.

6. Thiết lập Virtual Host

Trước kia nếu chạy website bằng http thì cổng của nó là 80. Nhưng nếu ta chuyển sang https thì cổng của nó mặc định là 443. Do đó ta cần chỉnh cổng thành 443.

Thêm nữa, trong nội dung cấu hình của virtual host này cần thêm 3-4 dòng lệnh SSLCertificate để SSL có thể làm việc với domain mà ta đang cấu hình trong virtual host.

Nếu ta mua SSL từ nhà cung cấp trung gian thì ta cần thêm SSLCertificateChainFile để chỉ ra xác thực từ nhà cung cấp trung gian ấy. Ví dụ như muassl.com.

[code]
<VirtualHost 192.168.0.1:443>
DocumentRoot /var/www/
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/sems.vn.crt
SSLCertificateKeyFile /etc/httpd/ssl/sems.vn.key
SSLCertificateChainFile /etc/httpd/ssl/chung_chi_trung_gian.crt
</VirtualHost>
[/code]

Trong đoạn mã trên ta cần lưu ý đến :443 là cổng dành cho SSL và SSLCertificationChainFile là lệnh giành cho chứng thực trung gian. Nếu SSLCertificationChainFile không chạy được ta có thể thay thế bằng SSLCACertificateFile.

Nhưng nếu ta mua SSL không thông qua nhà cung cấp trung gian thì ta có thể bỏ qua SSLCertificationChainFile.

[code]
<VirtualHost *:443>
DocumentRoot /var/www/
ServerName sems.vn:443
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/sems.vn.crt
SSLCertificateKeyFile /etc/httpd/ssl/sems.vn.key
</VirtualHost>
[/code]

7. Kiểm tra kết quả

Để kiểm tra kết quả ta cần khởi động lại Apache2 vì ta đã có sự thay đổi trong virtual host.

[shell]
service httpd restart
[/shell]

Giờ chỉ chạy địa chỉ http://sems.vn trên trình duyệt. Ta sẽ thấy ổ khóa màu xanh lá cậy được đặt ở đầu của thanh địa chỉ ngay đầu của https.

8. Tích hợp giao thức SPDY

SPDY được giới thiệu bởi Google nhằm mục đích tăng tốc độ website thông qua giải quyết đa luồng, nén dữ liệu và giải quyết theo độ ưu tiên.

Để tích hợp ta cần cài mô đun mod_spdy trong Ubuntu. Ta cần cài các gói để có thể biên dịch mod_spdy.

[shell]
sudo apt-get -y install git g++ libapr1-dev libaprutil1-dev \
curl patch binutils make devscripts
[/shell]

Sau đó tải mã nguồn từ github. Ở đây giả định ta đã cài git vào trong Ubuntu. Nếu chưa ta có thể tìm trên Google để cải git.

[shell]
git clone https://github.com/eousphoros/mod-spdy.git
[/shell]

Tiến hành biên dịch gói mod_spdy vừa tải.

[shell]
cd mod-spdy/src
sudo ./build_modssl_with_npn.sh
sudo chmod +x ./build/gyp_chromium
sudo make BUILDTYPE=Release
[/shell]

Tạm dừng Apache2 hiện tại để thiết lập mod_spdy

[shell]
sudo /etc/init.d/apache2 stop
sudo cp mod_ssl.so /usr/lib/apache2/modules
[/shell]

Kích hoạt SSL trong Apache2 nếu chưa kích hoạt.

[shell]
sudo a2enmod ssl
sudo a2ensite default-ssl
[/shell]

Những dòng lệnh sau giúp cấu hình SPDY chạy trên server.

[shell]
sudo cp out/Release/libmod_spdy.so /usr/lib/apache2/modules/mod_spdy.so
sudo echo "LoadModule spdy_module /usr/lib/apache2/modules/mod_spdy.so" | \
sudo tee /etc/apache2/mods-available/spdy.load
sudo echo "SpdyEnabled on" | sudo tee /etc/apache2/mods-available/spdy.conf
sudo a2enmod spdy
[/shell]

Khởi động lại Apache2 và kiểm tra kết quả.

[shell]
sudo /etc/init.d/apache2 restart
[/shell]

Chạy website với https. Sau đó inspect trình duyệt để xem header request. Nếu thấy x-mod-spdy là thành công.

9. Tham khảo

Hào Quang Việt. 2019. Cài đặt chứng chỉ SSL trên máy chủ Ubuntu với Apache2. Hào Quang Việt Company. [Online] 05 2019. https://muassl.com/ho-tro/huong-dan-cai-dat/cai-dat-chung-chi-ssl-tren-may-chu-ubuntu-voi-apache2.html.

2019. How To Install Mod_spdy With Apache On Ubuntu 16.04. IONOS. [Online] 05 2019. https://devops.ionos.com/tutorials/how-to-install-mod_spdy-with-apache-on-ubuntu-1604-1/.

Phạm, Thạch. 2019. Cài đặt chứng chỉ SSL trên Apache. Thạch Phạm Blog. [Online] 05 2019. https://thachpham.com/linux-webserver/cai-ssl-https-apache-centos6.html.

Tuyến, Nguyễn. 2019. Tăng tốc với Google SPDY. Quản trị mạng. [Online] 05 2019. https://quantrimang.com/tang-toc-voi-google-spdy-62126.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *