Trang chủ Linux Webserver Cài đặt chứng chỉ SSL và HTTPS lên Apache [CentOS 6]

Cài đặt chứng chỉ SSL và HTTPS lên Apache [CentOS 6]

bởi Thạch Phạm
26 bình luận 10,8K views

Tham gia nhóm hỗ trợ WordPress

Tham gia nhóm Hỗ trợ Server - Hosting & WordPress để cùng nhau hỏi đáp và hỗ trợ các vấn đề về WordPress, tối ưu máy chủ/server.

Tham gia ngay

Thật buồn cười khi trên blog mình đã có bài hướng dẫn cài SSL và HTTPS lên NGINX cho máy chủ hệ điều hành CentOS 6 mà lại thiếu hướng dẫn dành cho webserver Apache, vốn rất được thông dụng.

Cũng do bị kêu réo quá nên mình sẽ viết bài này cho việc cài đặt chứng chỉ SSL đã được xác thực (đã mua chứng chỉ) lên máy chủ CentOS 6 và sử dụng cho webserver Apache, đồng thời sẽ cài đặt thêm mod_spdy cho Apache để tăng tốc khi sử dụng giao thức HTTPS.

Làm trước khi cài SSL

Cài đặt mod_ssl

Để có thể cài chứng chỉ SSL cho Apache thì trước tiên bạn cần cài thêm mod_ssl của Apache với lệnh sau:

[bash]yum install mod_ssl[/bash]

Khuyến mãi Black Friday

Tạo thư mục lưu chứng chỉ

Bây giờ bạn hãy tạo một thư mục để lưu các file chứng chỉ SSL vào để bước cuối ta có thể dễ dàng gắn vào VirtualHost nhé, mình khuyến khích là tạo trong thư mục /etc/httpd cho dễ quản lý, ví dụ mình sẽ tạo một folder tên là /etc/httpd/ssl.

[bash]mkdir /etc/httpd/ssl[/bash]

Tạo Server Private Key

Trước tiên chúng ta sẽ cần tạo ra một Server Private Key cho server mà bạn cần cài đặt và kích hoạt SSL, mỗi server chỉ cần một Server Private Key là đủ.

Bây giờ mình muốn tạo server private key mang tên thachpham.me.key thì sẽ dùng lệnh sau để tạo, nhớ là lưu trong thư mục lưu chứng chỉ đã tạo ở trên nhé.

[bash]openssl genrsa -out /etc/httpd/ssl/thachpham.me.key 2048[/bash]

Thông báo sau khi tạo xong.

[root@tpssl public]# openssl genrsa -out /etc/httpd/ssl/thachpham.me.key 2048
Generating RSA private key, 2048 bit long modulus
.......................................+++
....+++
e is 65537 (0x10001)
[root@tpssl public]#

Tạo CSR Key

Ở bước này sẽ khá quan trọng và nó sẽ quyết định xem chứng chỉ SSL của bạn đã mua có thể chạy được trên server hay không.

Do cuối cùng ta phải cần một file tên là .crt để kích hoạt SSL cho website nên ta sẽ cần tạo một CSR Key (Certificate Signing Request) để tạo ra một chuỗi mã hóa đặc biệt nhằm gửi yêu cầu xác thực chứng chỉ SSL cho domain mà mình cần thiết lập, hay nói đúng hơn là sau khi bạn gửi CSR Key đến nhà cung cấp, họ sẽ cấp cho bạn một file CRT phù hợp với CSR của bạn.

Mỗi domain sẽ có một CSR riêng biệt nên bạn sẽ cần làm lại bước này nếu sau này muốn xác thực cho các domain khác trên cùng server. Và mỗi khi chuyển server, bạn cũng cần tạo một CSR Key mới.

Ví dụ trên server của mình đã có một file Server Private Key tên là /etc/httpd/ssl/thachpham.me.key và mình muốn tạo thêm một file tên CSR là /etc/httpd/ssl/thachpham.me.csr thì sẽ viết lệnh như sau:

[bash]openssl req -new -key /etc/httpd/ssl/thachpham.me.key -out /etc/httpd/ssl/thachpham.me.csr[/bash]

Và bây giờ, bạn sẽ nhập các thông tin sau (gõ không dấu). Bạn điền từ từ, nếu điền sai hãy ấn Ctrl + X (hoặc Ctrl + C, Ctrl + Z) rồi chạy lại lệnh trên để điền lại.

  • Country Name (2 letter code) [XX]: Mã quốc gia, đối với Việt Nam là VN.
  • State or Province Name (full name) []: Tên tỉnh thành
  • Locality Name (eg, city) [Default City]: Tên thành phố/quận huyệ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: thachpham.com, không chứa www)
  • Email Address []: Địa chỉ Email

Và 2 cái extra này bạn không cần nhập mà cứ Enter thôi.

Please enter the following 'extra' attributes
 to be sent with your certificate request
 A challenge password []:
 An optional company name []:

Và đây là mẫu điền của mình:

Country Name (2 letter code) [XX]:VN
State or Province Name (full name) []:Ba Ria Vung Tau
Locality Name (eg, city) [Default City]:Vung Tau
Organization Name (eg, company) [Default Company Ltd]:Thach Pham Blo
Organizational Unit Name (eg, section) []:Blogging
Common Name (eg, your name or your server's hostname) []:thachpham.me
Email Address []:[email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Nếu nó không hỏi gì nữa thì bạn đã tạo xong, bây giờ bạn đã có một cái CSR Key được lưu trong file .csr, đó là key mà chúng ta sẽ sử dụng để kích hoạt chứng chỉ SSL tại nơi mà bạn đã mua.

[bash]

[root@tpssl public]# cat /etc/httpd/ssl/thachpham.me.csr
—–BEGIN CERTIFICATE REQUEST—–
MIIC6TCCAdECAQAwgaMxCzAJBgNVBAYTAlZOMRgwFgYDVQQIDA9CYSBSaWEgVnVu
ZyBUYXUxETAPBgNVBAcMCFZ1bmcgVGF1MRcwFQYDVQQKDA5UaGFjaCBQaGFtIEJs
bzERMA8GA1UECwwIQmxvZ2dpbmcxFTATBgNVBAMMDHRoYWNocGhhbS5tZTEkMCIG
CSqGSIb3DQEJARYVY29udGFjdEB0aGFjaHBoYW0uY29tMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAvISp/HFv2b3ARGIMOEbe+fEVjaX+9BUp8dlvEJyk
3vrZGF5EH0Iti7W3bHFH+h+SUylRlJp7uUwrfN4CUDz6I0OjfNU2YPDkaxiggNnd
KHENZY6CV6FogJOscQgTtixUMUv7GljE6ofY3h/F7ckFcuR2mwhzx0z5vwaRA4K0
rJG+zfSyWcdjvtP9QROlvRBeecFWcx3bLVpfpwhHrbeX1fssozlY9eT92wVovuku
noowA6gxulV2dKVbx4n5aNoCKbksxlfPJ6InrGTtL2tyjE6d5Hgbdjr/zafb+sDY
cTOMllLFD1zT03NBu5sJVjj3ybfHVSFVxXEw0wjdHAY+MwIDAQABoAAwDQYJKoZI
hvcNAQEFBQADggEBABLAMG3XV2w28XfAIWezv+3BjZqRgypp9ebJZ8InCy4Q1NUH
Vz4WAgfhHkMrjDojf9Za33a/KE6KZYre5iANAjGvQDkE0/XLV5JyAMYFTairEbC8
1HIZUPxWXTv+OeIkykm2ZjN7qB8Y0Y9jQFMIxbp6HgBjYRRMGkpdOemfQ4psKEqU
UK2fL0TR4PrniiodkgiHYc+xpggCbYFQLaG59EyA4cQZJpDhew7I9UKcRLnfQoHW
wIJ1wWcMzqUsIWYxvr6M+mgFnBQf4BvWlqPCFzwEMvZgzhpkWD/AVDBovTjydM81
t/JGRywWqdfgneavoUZmtWPUJz+MV7GPZCRWYkk=
—–END CERTIFICATE REQUEST—–
[root@tpssl public]#
[/bash]

Gửi xác thực SSL

Bây giờ mình vào Namecheap, vào phần Manage SSL Certificates và ấn vào nút Activate Now ở cái SSL bạn đã mua.

Kích hoạt SSL tại Namecheap

Kích hoạt SSL tại Namecheap

Sau đó chọn loại webserver Apache + MOD SSL và copy cái nội dung file .csr của bạn vào.

ssl-apache-02

Chọn loại webserver và điền CSR Key

Ấn Next và chọn email mà bạn đang dùng, hãy chắc chắn email đó bạn đang dùng vì sẽ phải xác thực qua email.

ssl-apache-03

Chọn email sở hữu của domain cần xác thực SSL

Và điền thông tin cá nhân, nhập email cần nhận key chứng thực và ấn Submit Order.

ssl-apache-04

Bây giờ việc còn lại là bạn vào email sở hữu domain cần xác thực để kích hoạt.

Kích hoạt SSL cho Apache

Kích hoạt xong nó sẽ gửi qua email nhận key một bộ key chứng thực SSL, giải nén ra bạn sẽ được một file .crt và một file .ca-bundle, hãy upload tất cả vào thư mục /etc/httpd/ssl. Sau đó mở tập tin /etc/httpd/conf.d/ssl.conf lên và tìm cặp thẻ <VirtualHost _default_:443>..........</VirtualHost> rồi xóa đi và chèn đoạn này vào:

<VirtualHost *:443>
DocumentRoot "/home/dichvuwordpress/public"
ServerName thachpham.me:443

SSLEngine on
SSLCertificateFile /etc/httpd/ssl/thachpham_me.crt
SSLCertificateKeyFile /etc/httpd/ssl/thachpham.me.key
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

Bạn thay toàn bộ thông tin trên thành của bạn nha, cụ thể:

  • DocumentRoot: Đường dẫn tới thư mục lưu website.
  • ServerName: Domain của website, nhớ gõ thêm số port 443 vào đuôi.
  • SSLCertificateFile: Đường dẫn file .crt vừa upload.
  • SSLCertficateKeyFile: Đường dẫn file .key đã tạo ở bước đầu.

Lưu lại, khởi động lại Apache.

[bash]service httpd restart[/bash]

Sau đó xóa cookie và cache trình duyệt rồi truy cập vào domain với dạng https://domain.com, hoặc dùng trình duyệt khác mà kiểm tra.

ssl-apache-05

Thiết lập HTTPS cho WordPress

Bạn xem lại hai bước cuối của bài này.

Cài mod_spdy

Trước tiên chạy lệnh cài at và wget.

[bash]cd

yum install at wget -y[/bash]

Sau đó tải package về với gói tương ứng với loại hệ điều hành của bạn.

[bash]

# CentOS 6 32-bits

wget https://dl-ssl.google.com/dl/linux/direct/mod-spdy-beta_current_i386.rpm

# CentOS 6 64-bits

wget https://dl-ssl.google.com/dl/linux/direct/mod-spdy-beta_current_x86_64.rpm

[/bash]

Và cài nó.

[bash]rpm -U mod-spdy-*.rpm[/bash]

Cài xong, bạn vào thư mục /etc/httpd/conf.d/ mà thấy file spdy.conf là cài thành công. Bạn có thể mở ra và xóa dấu comment ở hai dòng này đi:

SpdyMaxThreadsPerProcess

SpdyMaxStreamsPerConnection

Để kiểm tra SPDY có hoạt động chưa, bạn vào https://spdycheck.org và gõ tên website vào để kiểm tra, nếu nó hiện như hình dưới là thành công.

ssl-apache-06

Chúc các bạn thành công!

Đánh giá nội dung này
26 bình luận

Có thể bạn quan tâm

Hiện tại blog tạm đóng bình luận vì mình cần tập trung thời gian vào cập nhật bài viết. Bình luận sẽ mở ra cho đến khi mình sẵn sàng.