Giới thiệu
Sercure Socket Layer (SSL) hiện nay là giao thức bảo mật rất phổ biến trên Internet trong các hoạt động thương mại điện tử (E-Commerce). Việt Nam đang trên đường hội nhập với nền công nghệ thông tin thế giới, nên nay mai, các hoạt động giao dịch trên mạng ở Việt Nam cũng sẽ diễn ra sôi nổi, khi đó vấn đề bảo mật trở nên quan trọng, việc triển khai SSL là điều thiết yếu. Tuy nhiên đến nay hình như vẫn chưa có trang Web nào ở Việt Nam sử dụng SSL trong các giao dịch của mình. Bài viết này nhằm giới thiệu sơ lược về SSL cũng như cách triển khai SSL trên Internet Information Server (IIS) 5.0 và Windows 2000
Chứng thực điện tử (Digital Certificate)
Chứng thực (certificate) là những tài liệu có chứa thông tin cần thiết cho quá trình thiết lập định danh (identity) qua mạng, quá trình đó còn gọi là quá trình xác thực (authentication). Chứng thực cho phép máy chủ (server) và máy khách (client) xác thực lẫn nhau trước khi thiết lập kết nối. Có hai loại chứng thực là chứng thực máy khách (client certificate) và chứng thực máy chủ (server certificate). Ngoài ra còn có một đối tác thứ ba làm dịch vụ cung cấp và kiểm tra chứng thực cho cả hai bên, đó là Certification Authority (CA), tất nhiên CA chỉ làm việc được khi cả hai bên đều tin tưởng vào mình.
Một số công ty chuyên làm dịch vụ CA:
VeriSign (http://www.verisign.com)
Thawte Consulting (http://www.thawte.com)
Entrust Technologied (http://www. entrust.com)
Keywitness (http://www.keywitness. ca)
Phương pháp hoạt động của SSL
Giao thức SSL nằm giữa tầng ứng dụng (application layer) thường là HTTP và tầng chuyển vận (transport layer) thường là TCP/IP. SSL dùng kỹ thuật mã hóa công khai để mã hóa tất cả liên lạc giữa server/client. SSL được giới thiệu bởi Netscape và mau chóng thành chuẩn cho các giao dịch trực tuyến, dẫn đến sự hình thành chuẩn giao thức Transport Layer Security (TLS) đang được phát triển bởi Internet Engineering Task Force.
SSL 2.0 hoạt động như sau:
1. Kết nối từ client đến server được thực hiện bằng giao thức HTTPS (HTTP+SSL)
2. Server kí khóa công khai (public key) bằng khóa bí mật (private key) của mình và gửi cho client
3. Client dùng khóa công khai của server để xác nhận đúng server đang liên lạc
4. Client kiểm tra xem có CA nào đã kí vào khóa. Nếu không client sẽ hỏi người dùng xem có nên tin tưởng vào server không
5. Client sinh ra một khóa bất đối xứng (asymmetric key) cho phiên giao dịch, khóa này được mã hóa bằng khóa công khai của máy chủ và gửi ngược lại. Khoá này cũng sẽ được dùng để mã hóa tất cả các thông tin sau này.
SSL 3.0 bổ sung thêm cho SSL 2.0 bằng cách hỗ trợ cho chứng thực máy khách (client certificate), giúp server có thể nhận diện ngược lại client. SSL 3.0 hoạt động như SSL 2.0 , nhưng sau khi client đã xác thực server, đến lượt server sẽ kiểm tra ngược lại client.
Triển khai SSL
Muốn tạo chứng thực cho server của mình, bạn phải liên lạc với một CA nào đó, tất nhiên bạn phải tốn một khoản tiền. Ngoài ra do một số ràng buộc pháp lý của chính phủ Mỹ (cấm truyền bá các công nghệ mã hóa cấp cao ra các nước ngoài khu vực Bắc Mỹ), bạn chỉ có thể nhận được một chứng thực có khóa “yếu” nếu bạn ở Việt Nam hay bất kỳ nước nào ngoài Mỹ và Canada.
Tuy nhiên bạn vẫn có thể có được một bộ khóa có độ dài tùy ý mà chẳng phải mất 1 xu nào, lại hoàn toàn không vi phạm bản quyền. Đó là sử dụng các công cụ của cộng đồng mã nguồn mở (open-source). OpenSSL (http://www.openssl.org) cung cấp công nghệ mã hóa miễn phí cho bất kỳ tổ chức, cá nhân nào cho các mục đích thương mại hoặc phi thương mại. OpenSSL Project phổ biến các công cụ mã nguồn mở nhằm triển khai giao thức Secure Socket Layer (SSL v2/v3) và Transport Layer Security (TLS v1) cũng như cung cấp một thư viện lập trình mã hóa đầy đủ chức năng. OpenSSL dựa trên thư viện SSLeay phát triển bởi Eric A.Young và Tim J.Hudson. Hiện nay OpenSSL engine đã có phiên bản 0.9.6b, bạn có thể download miễn phí tại địa chỉ trên.
Cài đặt OpenSSL
Để có thể cài đặt OpenSSL trên Windows, bạn cần có
- Perl for Win32 ( có thể download tại http://www.activestate.com/ActivePerl )
- Một trong số các trình biên dịch C sau: Visual C++, Borland C và GNU C (Mingw32 hay Cygwin32)
- Ngoài ra nếu bạn muốn biên dịch bằng Assembly (cho nhanh hơn), bạn cần có Microsoft MASM (trong bộ Microsoft DDK có thể download tại http://www.msdn.com) hay Free Netwide Assembler NASM. (miễn phí, có thể download tại http://www.kernel.org/pub/software/devel/nasm/binaries/win32/ )
- Nếu dùng VC, bạn làm như sau:
Đầu tiên bạn gọi lệnh: perl Configure VC-WIN32
Sau đó, nếu dùng MASM bạn gọi tiếp: ms\do_masm
Nếu dùng NASM thì gọi: ms\do_nasm
Nếu không muốn biên dịch bằng Assembly thì gọi: ms\do_ms
Nếu dùng Windows NT /2000 bạn có thể thay do_ms bằng do_nt để tận dụng khả năng của Windows NT
Biên dịch tất cả
nmake -f ms\ntdll.mak
Muốn kiểm tra lại thành quả của mình, bạn có thể gọi: cd out32dll
..\ms\test
Sử dụng OpenSSL
Out32dll\openssl.exe là file chương trình chính để thực hiện các lệnh tạo khóa, kiểm tra khóa, để biết thêm chi tiết, bạn có thể xem các tài liệu đi kèm hoặc trên trang web của OpenSSL (tại đây còn cho phép đăng ký vào các mailing list để trao đổi với nhiều người cùng quan tâm). Tôi chỉ giới thiệu cách tạo khóa nhanh chóng cho IIS 5.0 trên Windows 2000.
Chép file apps\openssl.cnf vào folder out32dll cho tiện (bạn có thể sửa đổi file này cho như ý)
Tự tạo chứng thực cho CA của chính mình
Tạo cặp khóa MyCA:
openssl genrsa -des3 -out MyCA.key 1024
Tạo chứng thực tự ký (self-signed CA certificate)
openssl req -new -config openssl.conf -x509 -days 365 -key MyCA.key -out MyCA.crt
Chuyển sang dạng PKCS#12 để có thể import vào IIS
openssl pkcs12 -export -in MyCA.crt -inkey MyCA.key -out MyCA.pfx
Tạo chứng thực cho máy chủ
Tạo cặp khóa MyServer:
openssl genrsa -des3 -out MyServer.key 1024
Tạo yêu cầu chứng thực (certificate signing request)
openssl req -config openssl.conf -out MyServer.csr -key MyServer.key –new
Kí vào yêu cầu (certificate request) với khóa bí mật của MyCA và tạo chứng thực cho MyServer
openssl x509 -CAcreateserial -CAserial MyCA.srl -in MyServer.csr -days 370 -req -extfile openssl.conf -extensions v3_req -CA MyCA.crt -CAkey MyCA.key -out MyServer.crt
Chuyển sang dạng PKCS#12 để có thể import vào IIS
openssl pkcs12 -export -in MyServer.crt -inkey MyServer.key -out MyServe.pfx
Cài đặt MyCA và MyServer trên Win2000
Chạy MMC:
Menu Start/Run.../mmc
Menu Console/Add/Remove snap-in.../Standalone/Add...
Certificates/Add/Computer Account/Next/Finish/Close/OK
Cài CA Certificate (MyCA):
+Console root
+Certificates
+Trusted Root Certification Authorities
Right-click vào Certificates/All Tasks/Import...
Chọn đường dẫn đến MyCA.pfx đã tạo ra ở trên
Càil End-use Certificate (MyServer):
+Console root
+Certificates
+Personal
Right-click Certificates/All Tasks/Import...
Chọn đường dẫn đến MyServer.pfx đã tạo ở trên
Cho IIS 5.0 dùng MyServer:
Menu Start/Settings/Control Panel/Administratove Tools/Internet Services Manager
Nhấn chuột phải vào Default Web Site/Properties/Directory Security/Server Certificate
Next/Assign an existing certificate/Next/Chọn MyServer &
Bảo mật trang web bằng SSL:
Menu Start/Settings/Control Panel/Administratove Tools/Internet Services Manager
Default Web Site/right-click vào thư mục cần bảo mật/Properties
Directory Security/Edit.../ thay đổi các thiết lập như mong muốn
Kiểm tra:
Mở Internet Explorer, truy cập vào trang web đã thiết lập SSL , nếu thấy biểu tượng ổ khóa ở bên dưới góc phải màn hình là bạn đã thành công.
Lưu ý:
Mặc định IE chỉ có khả năng mã hóa yếu nên nếu bạn chọn “Requires 128-bit encryption” (trên web server) thì sẽ có nhiều người không thể truy cập trang web được. Bạn có thể update IE lên 128-bit bằng chương trình update đi kèm một số đĩa Windows 2000.
Địa chỉ phải bắt đầu với https:// không phải là http://