Apache 2.0 với giao thức

SSL/TLS: Hướng dẫn

từng bước

PHẦN I: Tổng quát

Trong hơn mười năm, giao thức SSL đã được sử dụng rộng rãi

nhằm vào mục đích đảm bảo an toàn cho các giao dịch web qua

internet. Bạn có thể tưởng tượng mỗi ngày có hàng triệu, hàng tỉ

đô la giao dịch trên mạng dùng SSL. Tuy nhiên, sự thật giản dị là

chúng ta đã dùng SSL một cách không thực sự cần thiết. Các

thông tin được gửi qua giao thức này vẫn đảm bảo an toàn. Cách

mã hoá yếu, không kiểm chứng được các certificate (chứng chỉ)

của web servers (trên máy chủ), những lỗ hổng an ninh, cùng

nhiều kiểu tấn công khác có thể cho phép những kẻ xâm nhập

truy cập thông tin nhạy cảm, bất chấp sự thật rằng nó đang được

gửi qua SSL.

Bài báo này bắt đầu cho loạt bài giới thiệu về cấu hình của

Apache 2.0 có hỗ trợ giao thức SSL/TLS, nhằm bảo đảm an ninh

tối đa và sự thực thi tối ưu trong hoạt động truyền tải của SSL.

- Phần I: Giới thiệu về các khía cạnh của khoá (key) trong

SSL/TLS và hướng dẫn cách cài đặt, thiết lập cấu hình của 2.0 có

hỗ trợ các giao thức này.

- Phần II: Thảo luận về cấu hình của mod_ssl và các nguồn cung

cấp địa chỉ với bộ xác nhận web server.

- Phần III (cũng là phần cuối cùng): Thảo luận các vấn đề về xác

định quyền máy khách (client) và một số lỗi cấu hình điển hình

của các nhà quản trị. Các lỗi này có thể giảm mức an toàn của bất

kì mạng truyền thông sử dụng SSL nào.

Giới thiệu về SSL

Secure Sockets Layer (SSL) là giao thức được biết đến nhiều

nhất về khả năng bảo mật và độ tin cậy trong giao dịch khách -

chủ (client-server) trên mạng internet. Bản thân SSL được dựa

trên các khái niệm khá đơn giản. Nó sắp xếp các thuật toán mã

hoá và khoá giữa 2 lần gửi - nhận của một giao dịch. Sau đó thiết

lập một đưòng dẫn ảo mã hoá thông qua các giao thức khác (như

HTTP). SSL cũng có thể thẩm định cả hai chiều của giao dịch

thông qua việc dùng các “chứng chỉ” (certificate).

SSL là giao thức tầng (layered protocol), bao gồm 4 giao thức

con sau:

Giao thức SSL Handshake

Giao thức SSL Change Cipher Spec

Giao thức SSL Alert

SSL Record Layer

Vị trí của các giao thức trên, tương ứng với mô hình TCP/IP

được minh hoạ theo biểu đồ sau:

Biểu đồ 1. Các giao thức con của SSL trong mô hình TCP/IP

Theo biểu đồ trên, SSL nằm trong tầng ứng dụng của giao thức

TCP/IP. Do đặc điểm này, SSL có thể được dùng trong hầu hết

mọi hệ điều hành hỗ trợ TCP/IP mà không cần phải chỉnh sửa

nhân của hệ thống hoặc ngăn xếp TCP/IP. Điều này mang lại cho

SSL sự cải tiến mạnh mẽ so với các giao thức khác như IPSec (IP

Security Protocol). Vì giao thức này đòi hỏi nhân hệ điều hành

phải hỗ trợ và chỉnh sửa ngăn xếp TCP/IP. SSL cũng có thể dễ

dàng vượt qua tường lửa và proxy, cũng như NAT (Network

Address Translation) mà không cần nguồn cung cấp.

SSL hoạt động như thế nào? Biểu đồ dưới đây sẽ chỉ ra một

cách đơn giản với từng bước quá trình thiết lập kết nối SSL giữa

máy khách (client – dùng một đường dẫn web browser) và máy

chủ (server – dùng một SSL web server)

Biểu đồ 2. Từng bước thành lập một kết nối SSL

Như bạn thấy trên hình, quá trình thiết lập kết nối SSL bắt đầu

bằng việc trao đổi các tham số mã hoá và sau đó xác nhận các

server một cách tuỳ ý (dùng gia thức SSL Handshake). Nếu “bắt

tay” (Handshake) thành công, cả hai chiều đều chấp nhận bộ mã

hoá chung và các khoá mã hoá, thì dữ liệu ở tầng ứng dụng

(thông thường dùng HTTP, nhưng cũng có thể là một giao thức

khác) có thể được gửi thông qua đường hầm (tunnel) mã hoá

(dùngSSL Record Layer).

Trong thực tế, tiến trình trên còn phức tạp hơn một chút. Để tránh

những cái “bắt tay” không cần thiết, một số tham số mã hoá được

giữ lại. Các thông báo được gửi đi. Bộ mã hoá cũng có thể được

thay đổi. Tuy nhiên, bất chấp các đặc điểm kĩ thuật đó, cách thức

phổ biến nhất của tiến trình này làm việc thực sự như trên.

SSL, PCT, TLS và WTLS (nhưng không có SSH)

Mặc dù SSL là giao thức được biết đến nhiều nhất và phổ biến

nhất, nhưng nó không phải là giao thức duy nhất dùng cho mục

đích an toàn và giao vận trong web. Cũng khá quan trọng để biết

rằng, từ sau phát minh SSL v1.0 ra đời , có ít nhất năm giao thức

khác hoặc ít hơn hoặc nhiều hơn đóng vai trò quan trọng trong an

ninh truy cập World Wide Web. Cụ thể:

SSL v2.0

Phiên bản này được tạo ra bởi Netscape Communications năm

1994. Mục đích chính của giao thức này là cung cấp an toàn cho

các giao dịch trên World Wide Web. Thật không may, nhanh

chóng sau đó người ta thấy con số yếu kém về an toàn trong

phiên bản đầu của giao thức SSL này. Do đó làm cho nó kém tin

cậy hơn với cách dùng mang tính chất thương mại.

Cấu trúc của MAC yếu.

Có khả năng để các nhóm bắt buộc dùng bộ mã hoá yếu

Không bảo vệ quá trình “bắt tay”

Có khả năng những kẻ tấn công dùng kiểu cắt xén

(truncation attack)

PCT v1.0

Được phát triển bởi Microsoft vào năm 1995. PCT (Privacy

Communication Technology ) v1.0 địa chỉ hoá một số điểm yếu

của SSL 2.0 và đặt ra mục tiêu là thay thế SSL. Tuy nhiên giao

thức này đã không bao giờ thu được kết quả phổ biến như là SSL

v3.0.

SSL v3.0

Được phát hành vào năm 1996 bởi Netscape Communications.

SSL v3.0 giải quyết hầu hết các vấn đề của SSL v2.0 và kết hợp

rất nhiều thành phần của PCT. Nhanh chóng sau đó nó trở thành

giao thức phổ biến nhất cho an toàn truyền thông trên World

Wide Web.

TLS v1.0 (được biết đến như là SSL v3.1)

Được đưa ra bởi IETF vào năm 1999 (RFC 2246). Giao thức này

dựa trên SSL v3.0 và PCT. Nó cân bằng cả hai cách thức của

Netscape và Microsoft. Cũng cần chú ý rằng, mặc dù TLS dựa

trên SSL, nhưng nó không phải là phiên bản sau tương thích

100% với các bản trước nó. IETF đã thực hiện môt số cải tiến về

an toàn. Chẳng hạn như dùng HMAC thay vì MAC, dùng phép

tính toán khác trong bảo mật của máy chủ và tài liệu khoá (key),

thêm các bộ chỉnh sửa, không hỗ trợ bộ mã hoá Fortezza , v.v…

Kết quả của những nâng cấp này là các giao thức không hoạt

động được một cách đầy đủ. Cuối cùng TLS cũng rơi vào lãng

quên so với SSL v3.0.

WTLS

Phiên bản “di động và không dây” của giao thức TLS, sử dụng

giao thức UDP như là một hãng truyền thông. WTLS được thiết

kế và tối ưu cho các băng thông thấp hơn, các tiến trình nhỏ hơn

với các thiết bị di động cho phép dùng WAP. WTLS đưa ra cùng

giao thức WAP 1.1 bởi WAP Forum. Tuy nhiên, sau khi giao

thức WAP 2.0 được giới thiệu, WTLS bị thay thế bởi một phiên

bản nguyên trạng của TLS với mức an toàn cao hơn. Nó không

cần phải giải mã hay mã hoá lại lưu lượng tại cổng vào của

WAP.

Vì sao giao thức SSH lại không được dùng cho mục đích đảm

bảo an ninh khi truy cập WWW?

Có một vài lí do! Đầu tiên, ngay từ khi bắt đầu, TLS và SSL đã

được thiết kế cho các phiên an ninh mạng (HTTP), trong khi SSH

được lùi lại để thay thế cho Telnet và FTP. SSL không làm gì hơn

là “bắt tay” và thiết lập các “đường hầm mã hoá” . Và tại cùng

thời gian đó, SSH đưa ra cách đăng nhập giữa người - máy,

truyền tải các file an toàn, hỗ trợ cho nhiều bước kiểm tra quyền

(bao gồm mật khẩu, các khoá chung, Kerberos…). Mặt khác

SSL/TLS dựa trên các chứng chỉ X.509v3 và PKT, các chứng chỉ

này tạo nên sự phân phối và quản lí khả năng thẩm định quyền

hạn dễ dàng hơn nhiều. Với những lí do này và một số lí do khác

nữa làm cho SSL/TLS ngày càng phù hợp hơn an toàn truy cập

WWW và các kiểu khác tương tự trong truyền thông, bao gồm

SMTP, LDAP… trong khi SSH ngày càng thuận tiện cho việc

quản lí các hệ thống từ xa.

Nói tóm lại, mặc dù trong thực tế có nhiều giao thức “an toàn”

nhưng ta chỉ nên dùng hai giao thức giao dịch web (ít nhất tại

thời điểm này) là: TLS v1.0 và SSL v3.0. Cả hai đều được nhấn

mạnh trong loạt bài này với cái tên đơn giản là SSL/TLS. Bởi

những điểm yếu kém đã được biết đến của SSL v2.0 và “lỗ hổng

WAP” nổi tiếng của WTLS, chúng ta nên tránh dùng các giao

thức này, hoặc ít nhất là hạn chế ở mức thấp nhất.

Những yêu cầu của phần mềm

Trong phần tiếp theo của loạt bài

này, chúng ta sẽ được biết cách cấu

hình Apache 2.0 có hỗ trợ

SSL/TLS, dùng mô hình mod_ssl. Trước khi đi xa hơn, bạn đọc

nên download mã nguồn của phiên bản mới nhất Apache 2.0

từ website của Apache. Hầu hết các ví dụ cũng làm trong Apache

1.3.x. Trong trường hợp này mod_ssl cần được download riêng rẽ

từ mã nguồn của Apache trên websitemod_ssl.

Các ví dụ cụ thể trong bài này hầu hết làm trên các hệ điều hành

Linux, giống Linux và BSD – hệ thống điều hành cơ bản. Đòi

hỏi duy nhất cho hệ điều hành là phải có cả thư

viện OpenSSL và GCC.

Là một web browser mặc định, MS Internet Explorer đã được

chọn cho bài thử nghiệm của chúng ta chủ yếu bởi vì sự quá phổ

biến của nó. Tuy nhiên, bất kì một web brower hiện đại nào khác

cũng có thể được dùng

nhưFireFox, Mozilla, Netscape, Safari, Opera…

Cài đặt Apache hỗ trợ SSL/TLS

Bước đầu tiên để cài đặt phần mềm Apache có hỗ trợ SSL/TLS là

cấu hình và cài đặt Apache 2 web server, tạo ra một người dùng

và một nhóm được đặt tên là “apache”. Một cách cài đặt an toàn

đã được xuất bản trên SecurityFocus, trong bài báo Security

Apache 2.0: Step-by-Step. Chỉ có một điểm khác nhau duy nhất

là tiến trình để thiết lập mod_ssl và mod_setenvif. Nó đòi hỏi

phải tương thích với một số phiên bản của Internet Explorer như

sau (thay đổi được chỉ ra trong phần in đậm):

./configure \

--prefix=/usr/local/apache2 \

--with-mpm=prefork \

--enable-ssl \

--disable-charset-lite \

--disable-include \

--disable-env \

--enable-setenvif \

--disable-status \

--disable-autoindex \

--disable-asis \

--disable-cgi \

--disable-negotiation \

--disable-imap \

--disable-actions \

--disable-userdir \

--disable-alias \

--disable-so

Sau khi cấu hình xong, chúng ta có thể cài đặt Apache theo thư

mục gốc:

make

su

umask 022

make install

chown -R root:sys /usr/local/apache2