Thứ tư, 23/04/2014 | 00:00 GMT+7

Cách tạo chứng chỉ SSL trên Apache cho Ubuntu 14.04

TLS , hoặc transport layer security và SSL tiền nhiệm của nó, secure socket layer , là các giao thức an toàn được tạo ra để đặt lưu lượng truy cập bình thường trong một shell bọc được bảo vệ, mã hóa.

Các giao thức này cho phép truy cập được gửi một cách an toàn giữa các bên ở xa mà không có khả năng lưu lượng bị chặn và bị đọc bởi ai đó ở giữa. Chúng cũng là công cụ xác thực danh tính của các domain và server trên toàn internet bằng cách cài đặt một server được tổ chức cấp certificate tin cậy và chính hãng.

Trong hướng dẫn này, ta sẽ trình bày cách tạo chứng chỉ SSL tự ký cho Apache trên server Ubuntu 14.04, cho phép bạn mã hóa lưu lượng truy cập vào server của bạn . Mặc dù điều này không mang lại lợi ích cho việc bên thứ ba xác thực danh tính server của bạn, nhưng nó đáp ứng các yêu cầu của những người chỉ muốn chuyển thông tin một cách an toàn.

Lưu ý: Bạn có thể cần xem xét sử dụng Let's Encrypt thay vì certificate tự ký. Let's Encrypt là tổ chức phát hành certificate mới cung cấp certificate SSL / TLS miễn phí được tin cậy trong hầu hết các trình duyệt web. Xem hướng dẫn để bắt đầu: Cách bảo mật Apache bằng Let's Encrypt trên Ubuntu 14.04

Yêu cầu

Trước khi bắt đầu, bạn nên chuẩn bị một số cấu hình.

Ta sẽ hoạt động như một user không phải root với các quyền sudo trong hướng dẫn này. Bạn có thể cài đặt một server theo các bước 1-4 trong hướng dẫn cài đặt server ban đầu Ubuntu 14.04 của ta .

Bạn cũng cần phải cài đặt Apache. Nếu bạn chưa có và đang chạy, bạn có thể nhanh chóng sửa lỗi đó bằng lệnh :

sudo apt-get update sudo apt-get install apache2 

Bước một - Kích hoạt module SSL

Hỗ trợ SSL thực sự là tiêu chuẩn trong gói Apache Ubuntu 14.04. Ta chỉ cần kích hoạt nó để tận dụng SSL trên hệ thống của ta .

Bật module bằng lệnh :

sudo a2enmod ssl 

Sau khi bạn đã bật SSL, bạn sẽ phải khởi động lại web server để thay đổi được công nhận:

sudo service apache2 restart 

Như vậy, web server của ta hiện có thể xử lý SSL nếu ta cấu hình nó để thực hiện .

Bước hai - Tạo certificate SSL tự ký

Hãy bắt đầu bằng cách tạo một folder con trong hệ thống phân cấp cấu hình của Apache để đặt các file certificate mà ta sẽ tạo:

sudo mkdir /etc/apache2/ssl 

Bây giờ ta đã có vị trí để đặt khóa và certificate của bạn , ta có thể tạo cả hai trong một bước bằng lệnh :

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt 

Hãy xem xét chính xác điều này nghĩa là gì.

  • openssl : Đây là công cụ dòng lệnh cơ bản do OpenSSL cung cấp để tạo và quản lý certificate , khóa, yêu cầu ký, v.v.
  • yêu cầu : Điều này chỉ định một lệnh con để quản lý yêu cầu ký certificate X.509 (CSR). X.509 là một tiêu chuẩn cơ sở hạ tầng public key mà SSL tuân theo để quản lý khóa và certificate của nó. Vì ta muốn tạo certificate X.509 mới nên Đây là kết quả ta muốn.
  • -x509 : Tùy chọn này chỉ định rằng ta muốn tạo file certificate tự ký thay vì tạo certificate request .
  • -nodes : Tùy chọn này cho OpenSSL biết rằng ta không muốn bảo mật file khóa của bạn bằng passphrase (password bảo vệ) . Việc có một file khóa được bảo vệ bằng password sẽ cản trở Apache tự động khởi động vì ta sẽ phải nhập password mỗi khi dịch vụ khởi động lại.
  • -days 365 : Điều này chỉ định rằng certificate ta đang tạo sẽ có hiệu lực trong một năm.
  • -newkey rsa: 2048 : Tùy chọn này sẽ tạo certificate request và private key mới cùng một lúc. Điều này là cần thiết vì ta đã không tạo private key trước. rsa:2048 yêu cầu OpenSSL tạo khóa RSA dài 2048 bit.
  • -keyout : Tham số này đặt tên file kết quả cho file private key đang được tạo.
  • -out : Tùy chọn này đặt tên cho file kết quả cho certificate mà ta đang tạo.

Khi bạn nhấn "ENTER", bạn sẽ được hỏi một số câu hỏi.

Mục quan trọng nhất được yêu cầu là dòng ghi “Tên chung (ví dụ: server FQDN hoặc tên BẠN)”. Bạn nên nhập domain bạn muốn liên kết với certificate hoặc địa chỉ IP công cộng của server nếu bạn không có domain .

Phần câu hỏi trông giống như sau:

<pre>
Tên quốc gia (mã gồm 2 chữ cái) [AU]: <span class = “highlight”> US </span>
Tên Tiểu bang hoặc Tỉnh (tên đầy đủ) [Một số Tiểu bang]: <span class = “highlight”> New York </span>
Tên local (ví dụ: city ) []: <span class = “highlight”> Thành phố New York </span>
Tên tổ chức (ví dụ: công ty) [Internet Widgits Pty Ltd]: <span class = “highlight”> Công ty của bạn </span>
Tên đơn vị tổ chức (ví dụ: section) []: <span class = “highlight”> Cục mèo con </span>
Tên chung (ví dụ: server FQDN hoặc tên BẠN) []: <span class = “highlight”> your domain.com </span>
Địa chỉ Email []: <span class = “highlight”>
email@domain.com </span> của bạn
</pre>

Khóa và certificate sẽ được tạo và đặt trong folder /etc/apache2/ssl .

Bước 3 - Cấu hình Apache để sử dụng SSL

Bây giờ ta đã có certificate và khóa của bạn , ta có thể cấu hình Apache để sử dụng các file này trong file server ảo. Bạn có thể tìm hiểu thêm về cách cài đặt server ảo Apache tại đây.

Thay vì đặt file cấu hình của ta dựa trên file 000-default.conf trong folder con sites-available trên sites-available , ta sẽ căn cứ cấu hình này vào file default-ssl.conf có chứa một số cấu hình SSL mặc định.

Mở file với quyền root ngay bây giờ:

sudo nano /etc/apache2/sites-available/default-ssl.conf 

Khi các comment bị xóa, file trông giống như sau:

<pre>
<IfModule mod ssl.c>
<VirtualHost _default
: 443>
Administrator web ServerAdmin @ localhost
DocumentRoot / var / www / html
ErrorLog $ {APACHE LOG DIR} /error.log
CustomLog $ {APACHE LOG DIR} /access.log kết hợp
SSLEngine đang bật
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch “. (Cgi | shtml | phtml | php) $”>
SSLOptions + StdEnvVars
</FilesMatch>
<Thư mục / usr / lib / cgi-bin>
SSLOptions + StdEnvVars
</Directory>
BrowserMatch “MSIE [2-6]” \
nokeepalive ssl-dirty-shutdown \
hạ cấp-1.0 lực-phản hồi-1.0
BrowserMatch “MSIE [17-9]” ssl-dirty-shutdown
</VirtualHost>
</IfModule>
</pre>

Điều này có thể trông hơi phức tạp, nhưng may mắn thay, ta không cần phải lo lắng về hầu hết các tùy chọn ở đây.

Ta muốn cài đặt những thứ bình thường mà ta sẽ cấu hình cho một server ảo (ServerAdmin, ServerName, ServerAlias, DocumentRoot, v.v.) cũng như thay đổi vị trí nơi Apache tìm kiếm certificate SSL và khóa.

Cuối cùng, nó sẽ giống như thế này. Các mục màu đỏ đã được sửa đổi từ file root :

<pre>
<IfModule mod ssl.c>
<VirtualHost _default
: 443>
ServerAdmin <span class = “highlight”> admin@example.com </span>
<span class = “highlight”> ServerName your domain.com </span>
<span class = “highlight”> ServerAlias www.your
domain.com </span>
DocumentRoot <span class = “highlight”> / var / www / html </span>
ErrorLog $ {APACHE LOG DIR} /error.log
CustomLog $ {APACHE LOG DIR} /access.log kết hợp
SSLEngine đang bật
SSLCertificateFile <span class = “highlight”> / etc / apache2 / ssl / apache.crt </span>
SSLCertificateKeyFile <span class = “highlight”> / etc / apache2 / ssl / apache.key </span>
<FilesMatch “. (Cgi | shtml | phtml | php) $”>
SSLOptions + StdEnvVars
</FilesMatch>
<Thư mục / usr / lib / cgi-bin>
SSLOptions + StdEnvVars
</Directory>
BrowserMatch “MSIE [2-6]” \
nokeepalive ssl-dirty-shutdown \
hạ cấp-1.0 lực-phản hồi-1.0
BrowserMatch “MSIE [17-9]” ssl-dirty-shutdown
</VirtualHost>
</IfModule>
</pre>

Lưu và thoát khỏi file khi bạn hoàn tất.

Bước 4 - Kích hoạt Server ảo SSL

Bây giờ ta đã cấu hình server ảo hỗ trợ SSL, ta cần kích hoạt nó.

Ta có thể làm điều này bằng lệnh :

sudo a2ensite default-ssl.conf 

Sau đó, ta cần khởi động lại Apache để tải file server ảo mới của ta :

sudo service apache2 restart 

Điều này sẽ kích hoạt server ảo mới của bạn, server này sẽ cung cấp nội dung được mã hóa bằng certificate SSL bạn đã tạo.

Bước năm - Kiểm tra cài đặt của bạn

Đến đây bạn đã chuẩn bị mọi thứ, bạn có thể kiểm tra cấu hình của bạn bằng cách truy cập domain hoặc địa chỉ IP công cộng của server sau khi chỉ định giao thức https:// , như sau:

<pre>
https: // <span class = “highlight”> tên domain hoặc IP server </span>
</pre>

Bạn sẽ nhận được cảnh báo rằng trình duyệt của bạn không thể xác minh danh tính của server của bạn vì nó chưa được ký bởi một trong những tổ chức phát hành certificate mà nó tin cậy.

cảnh báo ssl apache

Điều này được mong đợi vì ta đã tự ký certificate của bạn . Mặc dù certificate của ta sẽ không xác thực server của ta cho user của ta vì nó không có tương tác với tổ chức phát hành certificate tin cậy , nó vẫn có thể mã hóa giao tiếp.

Vì điều này được mong đợi, bạn có thể nhấn nút "Vẫn tiếp tục" hoặc bất kỳ tùy chọn tương tự nào bạn có trong trình duyệt của bạn .

Đến đây bạn sẽ được đưa đến nội dung trong DocumentRoot mà bạn đã cấu hình cho server ảo SSL của bạn . Lần này lưu lượng truy cập của bạn đã được mã hóa. Bạn có thể kiểm tra bằng cách nhấp vào biểu tượng ổ khóa trên thanh menu:

apache ssl được mã hóa

Bạn có thể thấy trong phần màu xanh lá cây ở giữa rằng kết nối đã được mã hóa.

Kết luận

Đến đây bạn sẽ bật SSL trên trang web của bạn . Điều này sẽ giúp bảo mật thông tin liên lạc giữa khách truy cập và trang web , nhưng nó sẽ cảnh báo mỗi user rằng trình duyệt không thể xác minh tính hợp lệ của certificate .

Nếu bạn đang lên kế hoạch chạy một trang web công cộng và cần SSL, tốt hơn hết bạn nên mua certificate SSL từ một tổ chức phát hành certificate tin cậy .

Nếu bạn muốn tìm hiểu thêm về cách cấu hình Apache , hãy nhấp vào đây. Hãy xem liên kết này để biết thêm ý tưởng về cách bảo mật server Linux của bạn .

<div class = “author”> Bởi Justin Ellingwood </div>


Tags:

Các tin liên quan

Cách thiết lập server ảo Apache trên Ubuntu 14.04 LTS
2014-04-22
Cách cài đặt Apache Tomcat 7 trên Ubuntu 14.04 qua Apt-Get
2014-04-18
Cách thiết lập server ảo Apache trên Ubuntu 13.10
2014-04-16
Cách chạy Django với mod_wsgi và Apache với môi trường Python virtualenv trên VPS Debian
2014-04-10
Cách di chuyển cấu hình Apache của bạn từ cú pháp 2.2 sang 2.4.
2014-03-31
Cách sử dụng server Apache HTTP dưới dạng Reverse-Proxy bằng cách sử dụng extension mod_proxy
2014-02-14
Cách cài đặt và cấu hình Apache Tomcat trên server Debian
2014-01-07
Cách cài đặt và quản lý Apache Qpid
2013-12-30
Cách chuyển từ web server Apache sang Nginx trên VPS Ubuntu
2013-12-17
Cách cài đặt Apache mod_spdy trên VPS Debian 7
2013-12-12