Trong môi trường làm việc localhost, đôi khi chúng ta cần thử nghiệm mã nguồn web bằng tên miền cục bộ với giao thức HTTPS trên trình duyệt. Thế nhưng, để giao thức HTTPS có thể hoạt động thì trước tiên chúng ta cần phải cài đặt chứng chỉ bảo mật số SSL cho tên miền cục bộ này trên máy chủ (máy chủ trong bài hướng dẫn này tất nhiên là chương trình tạo máy chủ ảo Xampp đã được cài đặt thành công trên máy tính cá nhân). Tóm lại, trong bài này mình sẽ hướng dẫn các bạn cài đặt SSL cho Xampp trên máy tính cục bộ chạy hệ điều hành windows.

Một khi cài đặt SSL cho Xampp thành công thì chúng ta sẽ nhận được hai chữ Bảo Mật hoặc Secure cùng với ổ khóa xanh rờn trên thanh địa chỉ của Chrome nếu ngôn ngữ trình duyệt của bạn là English. Tương tự là Kết nối an toàn/Secure Connection đối với các trình duyệt khác.

Tổng quan, quy trình & lưu ý trước khi bắt đầu

Tổng quan

Kể từ phiên bản 58 trở đi đối với các trình duyệt sử dụng mã nguồn mở Chromium, điển hình là trình duyệt Chrome cũng như phiên bản nâng cấp ‘đồng hành’ của một số trình duyệt thông dụng khác. Khi chúng ta truy cập địa chỉ trang web có sử dụng giao thức bảo mật HTTPS được tự ký (self signed) và cấp phát bằng OpenSSL thì sẽ gặp phải lỗi “Subject Alternative Name Missing” hay NET::ERR_CERT_COMMON_NAME_INVALID hoặc là “Your connection is not private”.

Xem chi tiết thông báo của các nhà phát triển Chrome tại đây.

Sở dĩ gặp phải lỗi trên là do các nhà phát triển trình duyệt đã có một số thay đổi về phương thức xác thực chứng chỉ SSL khi nó được gọi từ trình duyệt thông qua giao thức HTTPS.

Giờ đây, các trình duyệt sẽ không còn quá chú trọng vào commonName (CN) như trong quá khứ nữa, mà chỉ tập trung vào subject alternaltive name (SAN) được cung cấp trong chứng chỉ SSL, SAN này tạm dịch là tên thay thế hay địa chỉ phụ, nó có thể là tên miền(domain) hoặc địa chỉ IP.

Nếu chứng chỉ của bạn không có một SAN thì trình duyệt sẽ thông báo lỗi NET::ERR_CERT_COMMON_NAME_INVALID và cho biết kết nối này không bảo mật, không an toàn. Hoặc chứng chỉ của bạn có một SAN nhưng cấu hình không chính xác, ví dụ như tên miền chính đang sử dụng lại không nằm trong danh sách của SAN thì sẽ nhận được cảnh báo subject alternative name is missing. Bạn có thể xem chi tiết cảnh báo này trong tab Bảo mật/Security của trình phát triển trình duyệt.

Để giải quyết vấn đề này, chỉ cần bạn ký lại một chứng chỉ SSL cấp cho tên miền với phần bổ trợ SAN (subjectAlternativeName extensions) chính xác là được. Và đây cũng là công việc chính của chúng ta thông qua bài viết này.

Quy trình chính trong bài viết

  1. Trở thành nhà cung cấp chứng thực số (Certificate Authority – CA).
  2. Tạo yêu cầu ký chứng chỉ (Certificate signing request – CSR) cho tên miền chính mặc định trong Xampp là localhost cùng các SAN của nó. Đồng thời dùng quyền lực của CA đã tạo để cấp phát chứng chỉ.
  3. Cấu hình và cài đặt SSL cho Xampp.
  4. Tạo CSR và chứng thực SSL đồng thời cho nhiều tên miền ảo trong Xampp.
  5. Tổng kết.

Lưu ý trước khi bắt đầu

  • Bài hướng dẫn được thực hiện trên Windows 10 64 bit (các phiên bản Windows khác mình chưa thử nhưng thiết nghĩ cũng không có khác biệt gì nhiều) , Xampp được cài đặt tại C:\xampp với phiên bản Xampp 7.1.8 cùng OpenSSL 1.0.2đi kèm.
  • Tên miền chính sử dụng trong bài viết là tên miền cục bộ mặc định sau khi cài đặt hoàn thành Xampp localhost và các SAN của nó mail.localhostftp.localhostwww.localhost, 127.0.0.1, ::1
  • Tên miền ảo sử dụng để thử nghiệm cài đặt song song nhiều SSL là itshare-online.dev và SAN của nó www.itshare-online.dev
  • Để tiện cho việc chỉnh sửa thì các bạn nên dùng các công cụ biên tập code như Notepad++, VS Code hoặc Sublime Text…
  • Nếu chưa cài đặt Xampp thì đừng quên cài đặt hoàn tất chương trình Xampp theo hướng dẫn này.
  • Để tránh lỗi ngoài ý muốn thì các bạn nên cài đặt lại một Xampp hoàn toàn mới trước khi bắt đầu theo hướng dẫn này nếu là bạn là người mới. Nếu bạn là người dùng nâng cao thì có thể tự cân nhắc để không phải phát sinh lỗi.

1 Trở thành CA.

1.1 Tạo tập tin cấu hình mặc định cho CA

Truy cập vào thư mục C:\xampp\apache\conf, nhớ sửa lại theo đường dẫn của bạn nếu bạn cài đặt Xampp tại vị trí khác.

Trong C:\xampp\apache\conf, bạn sẽ dễ dàng nhìn thấy tập tin openssl.cnf,  Đây là tập tin cấu hình gốc của OpenSSL, có thể mở lên
để quan sát nhưng tốt nhất không nên chỉnh sửa gì trong đó, bởi vì trong bài này chúng ta sẽ không động vào nó.

Tại vị trí này, tạo một tập tin mới và đặt tên là openssl-ca.cnf

Bạn nào lười cũng có thể copy tập tin openssl.cnf rồi đổi tên lại thành openssl-ca.cnf. Sau đó dùng chương trình biên tập code của bạn mở file openssl-ca.cnf này lên. Dán toàn bộ code bên dưới vào, hoặc thay thể toàn bộ nếu các bạn copy từ tập tin openssl.cnf

Dòng 20 – default_days = 730 # Con số 730 chính là thời hạn có hiệu lực mặc đinh của chứng chỉ mà CA sẽ ký và cấp phát cho tên miền mà chúng ta yêu cầu. Tương đương 2 năm. Các bạn có thể thay đổi sao cho thích hợp với nhu cầu sử dụng của bản thân.

Nhớ sửa lại thông tin CA trong block [ ca_distinguished_name ] cho phù hợp với thông tin của bạn.

Dòng 41 – countryName_default = VN
Dòng 44 – stateOrProvinceName_default = Go Vap
Dòng 47 – localityName_default = Ho Chi Minh
Dòng 50 – organizationName_default = NHTDEV Local CA, Limited
Dòng 53 – organizationalUnitName_default = Server Certificate Provider
Dòng 56 – commonName_default = NHTDEV Local CA
Dòng 59 – emailAddress_default = ca@localhost

Còn lại, cái nào không hiểu thì tốt nhất giữ nguyên không nên động chạm vào. Hoặc nếu lười thì khỏi cần thay đổi, dùng luôn thông tin của mình cũng được. ?

Sau đó lưu tập tin lại.

1.2 Tiến hành đăng ký trở thành CA

1.2.1 Tạo tập tin makecert.ca.bat

Quay trở lại thư mục C:\xampp\apache ta cũng sẽ thấy tập tin tạo chứng chỉ mặc định makecert.bat của OpenSSL. Tương tự như trên, chúng ta cũng không nên đụng chạm vào tập tin gốc này mà tạo tập tin mới đặt tên là makecert.ca.bat

Tiếp đó mở tập tin makecert.ca.bat vừa tạo thay thế toàn bộ code bên dưới vào rồi lưu lại.

Chú ý: Dòng 10 có tham số -days 3650 nghĩa là CA mà chúng ta đang tạo sẽ có quyền lực trong 10 năm. Chúng ta có thể tái sử dụng CA này để cấp chứng chỉ cho vô số tên miền trong vòng 10 năm tới. Thời hạn 10 năm này không liên quan gì đến thời hạn chứng chỉ của SSL mà CA cấp cho tên miền.

Tập tin makecert.ca.bat này đã được mình cố định để tái sử dụng liên tục, tuyệt đối không nên chỉnh sửa gì trong này. Đương nhiên, nếu bạn đã thật sự hiểu cấu trúc của nó thì cứ việc chỉnh sửa thoải mái và tất nhiên cũng phải tự chịu trách nhiệm. =))

1.2.2 Thực thi makecert.ca.bat

Nhấp đúp chuột vào tập tin makecert.ca.bat vừa mới lưu để tiến hành đăng ký trở thành CA.

Một cửa sổ dòng lệnh CMD sẽ bật lên. Do mọi thông tin chúng ta đã tạo sẵn trong tập tin openssl-ca.cnf trong thư mục C:\xampp\apace\conf ở trên rồi nên cứ nhấn Enter để nó lấy thông tin theo mặc định. Sau khi nó chạy xong thì nhấn phiếm bất kỳ để thoát. Kết quả xuất ra trên CMD sẽ tương tự như sau:

1.3 Hoàn tất thủ tục trở thành CA với Windows (Microsoft)

Đại khái là nói với Máy tính của bạn rằng bạn là một CA đáng tin cậy ? Chẳng lẽ bản thân minh còn không tin được mình. ?

Nhấn phím Windows + R để mở hộp lệnh Run. Gõ lệnh certmgr.msc sau đó nhấn Enter để chạy chương trình Certificates Manager

Hộp thoại Certificates Manager sẽ được gọi ra.

Chọn dòng thứ 2 Trusted Root Certification Authorities > Certificates (Chuột phải) > All Task > Import…

Trong hộp thoại Certificate Import Wizard hiện lên chọn Next

Trong hộp thoại tiếp theo, nhấn Browser và duyệt tìm tới file cacert.crt đã được khởi tạo ra trong quá trình đăng ký trở thành CA ở trên và nhấn Next.

Trong trường hợp của mình thì đường dẫn tuyệt đối của nó là C:\xampp\apache\conf\ssl.ca\cacert.crt

Next để lưu chứng nhận CA vào kho dữ liệu của máy tính

Sau khi Finish thì sẽ có một hộp thoại cảnh báo bảo mật Security Warning hiện lên.

Sở dĩ có cái cảnh báo này là bởi vì chúng ta đang lừa mình dối người, tự khen bản là người tốt. Windows nghi nghờ nên hỏi lại lần cuối.

Chọn Yes để xác nhận mình là người tốt là được ?

Click Ok để kết thúc quá trình kích hoạt chứng nhận.

Sở dĩ có cái cảnh báo này là bởi vì chúng ta đang lừa mình dối người, tự khen bản là người tốt. Windows nghi nghờ nên hỏi lại lần cuối.

Chọn Yes để xác nhận mình là người tốt là được ?

Click Ok để kết thúc quá trình kích hoạt chứng nhận.

Vậy là xong phần đăng ký trở thành CA

1.4 Kiểm tra thông tin CA vừa tạo

Thử mở hộp thoại Certificates Manager > Trusted Root Certification Authorities > Certificates, tìm tới chứng nhận CA vừa tạo, nháy đúp chuột với mở lên kiểm tra lại thông tin xem thử ra sao.

2 Tạo CSR cho localhost cùng các SAN của nó, đồng thời dùng CA để chứng thực CSR

2.1 Tạo tập tin cấu hình SSL mặc định cho localhost

Tương tự như tạo file cấu hình cho CA ở trên. Truy cập vào thư mục cài đặt Xamp C:\xampp\apache\conf, nhớ sửa lại theo đường dẫn của bạn nếu bạn cài đặt Xampp tại vị trí khác.

Trong C:\xampp\apache\conf, tạo tập tin mới và đặt tên là openssl-localhost.cnf.  Đây sẽ là tập tin cấu hình cho localhost và các SAN của nó.

Mở tập tin openssl-localhost.cnf lên và thay thế hoặc dán toàn bộ code bên dưới vào. Sau đó lưu lại.

Lưu ý: Thay đổi các thông số trong block [ server_distinguished_name ] cho phù hợp với thông tin của bạn. Lười thì dùng thông tin mặc định của mình cũng chả sao ?

* Dòng 27 – commonName_default = My Localhost
Trước đó, các trình duyệt web dựa vào thông tin commonName (CN) này để xác nhận miền chính sẽ được ký trong chứng chỉ, tức là miền localhost ở đây. Nhưng kể từ các phiên bản cao hơn như đã nói ở trên, các trình duyệt không còn dựa vào nó nữa mà sẽ chỉ dựa vào các DNS và IP trong block [ alternate_names ], tức là các SAN, cho nên ở dòng này các bạn có thể nhập tên của trang web hoặc chính tên riêng của các bạn cũng được, không nhất thiết phải là tên miền. Miễn sao miền được ký phải có mặt trong SAN.

Lẽ ra, chúng ta còn thêm một bước nữa là đó là trỏ IP cho tên miền. Nhưng chúng ta đang làm việc với miền đặc biệt localhost, tất cả các miền có đuôi  .localhost đều được mặc định trỏ tới IPv4: 127.0.0.1 và IPv6: ::1, vậy nên chúng ta cũng không cần phải tốn công để trỏ làm gì cho mệt. Tuy nhiên, bên dưới sẽ có phần cài đặt ssl cho tên miền ảo, lúc đó chúng ta cần làm thêm một bước trỏ IP cho miền trước khi thực thi ký chứng chỉ SSL.

2.2 Tiến hành tạo CSR cho miền localhost cùng các SAN đồng thời dùng CA để chứng thực CSR

2.2.1 Tạo tập tin thực thi makecert.localhost.bat

Quay trở lại thư mục C:\xampp\apache

Tương tự như ở trên, chúng ta cũng tạo mới một tập tin có tên makecert.localhost.bat rồi dán toàn bộ code sau đây vào:

Lưu ý: Dòng 49 và dòng 77, có số 01 chính là số serial của chứng chỉ. Bởi vì chúng ta dùng cùng một CA đã tạo ở trên để ký chứng nhận cho nhiều chứng chỉ cùng lúc cho nên mỗi khi ký tạo chứng chỉ mới thì các bạn nhớ thay đổi số serial này để tránh lỗi ngoài ý muốn.

Bây giờ chúng ta chuẩn bị ký tạo chứng chỉ đầu tiên được CA chứng nhận và cấp phát nó cho localhost nên sẽ có số serial là 01, mọi người có thể lấy số tùy thích nhưng phải là số nguyên và không được trùng nhau giữa các chứng chỉ.

Nhớ lưu tập tin lại.

2.2.2 Thực thi makecert.localhost.bat

Nhấp đúp chuột vào tập tin makecert.localhost.bat vừa mới lưu để tiến hành tạo yêu cầu ký chứng chỉ (CSR) cho tên miền localhost và các SAN của nó.

Một cửa sổ dòng lệnh CMD sẽ bật lên. Mọi thông tin chúng ta đã định sẵn trong tập tin cấu hình mặc định trong tập tin C:\xampp\apace\conf\openssl-localhost.cnf rồi nên cứ nhấn Enter là được. Chú ý đọc kỹ chú thích mình in sẵn trên CMD rồi hãy nhấn Enter.

Lẽ ra, mỗi một công đoạn, mình sẽ tạo một tập tin thực thi .bat khác và tiến hành riêng lẻ cho mọi người dễ hiểu. Nhưng mà do mình lười và cũng để tiết kiệm thời gian cho các bạn nên đã gộp chung tất cả trong một tập tin makecert.localhost.bat. Mình cũng đã ghi chú về ý nghĩa của mỗi công đoạn và dòng lệnh trong tập tin cả rồi, nó cũng sẽ được hiển thị trong của sổ CMD, mọi người cứ làm theo nhắc nhở trong ghi chú là được.

Kết quả xuất ra trên CMD khi chạy xong tập tin makecert.localhost.bat sẽ tương tự như sau:

Sau khi chạy xong thì nhấn phím bất kỳ để thoát CMD.

Xong phần này, đến phần kế tiếp

3 Cài đặt SSL cho Xampp và cấu hình SSL cho miền localhost

Truy cập thư mục C:\xampp\apache\conf\extra tìm đến tập tin httpd-vhosts.conf, đổi tên tập tin này và tạo một tập tin httpd-vhosts.conf mới. Mục đích là để backup tập tin gốc, đề phòng có sai sót thì có cái mà phục hồi, đã nhắc nhiều lần ở trên rồi. ?

Dán toàn bộ nội dung phần code sau đây vào tập tin httpd-vhosts.conf mới và lưu lại:

Tương tự, cũng trong thư mục C:\xampp\apache\conf\extra, tìm đến tập tin httpd-ssl.conf backup nó và tạo lại tập tin mới. Sau đó dán toàn bộ nội dung dưới đây vào và lưu lại:

Khởi động lại Xampp và truy cập localhost cùng các SAN của nó với giao thức HTTPS và xem kết quả đi nào!

Xem thêm: https://itshare.online/knowledge/web-server/cai-dat-ssl-cho-xampp-tren-windows/