#tuts: Hướng dẫn cài đặt SSL trong Nodejs và Express sử dụng OpenSSL

nodejs and express using openssl

SSL là gì?

SSL là viết tắt của Secure Sockets Layer, một công nghệ tiêu chuẩn cho phép thiết lập kết nối được mã hóa an toàn giữa máy chủ web (host) và trình duyệt web (client). Kết nối này đảm bảo rằng dữ liệu được truyền giữa host và client được duy trì một cách riêng tư, đáng tin cậy.

– Quản trị mạng

SSL hiện đã được sử dụng bởi hàng triệu trang web để bảo vệ các giao dịch trực tuyến của họ với khách hàng. Nếu bạn đã từng truy cập một trang web sử dụng https:// trên thanh địa chỉ nghĩa là bạn đã tạo một kết nối an toàn qua SSL.

Các bước hoạt động của SSL:

  1. Browser connects to a web server (website) secured with SSL (https). Browser requests that the server identify itself.
  2. Server sends a copy of its SSL Certificate, including the server’s public key.
  3. Browser checks the certificate root against a list of trusted CAs and that the certificate is unexpired, unrevoked, and that its common name is valid for the website that it is connecting to. If the browser trusts the certificate, it creates, encrypts, and sends back a symmetric session key using the server’s public key.
  4. Server decrypts the symmetric session key using its private key and sends back an acknowledgement encrypted with the session key to start the encrypted session.
  5. Server and Browser now encrypt all transmitted data with the session key
– – https://www.digicert.com/ssl/
ssl working
Các bước hoạt động của SSL đối với Website

Tại sao lại cần đối với website?

SSL cung cấp tính xác thực và tính tin cậy cho người sử dụng website. Nhất là với các trang có dữ liệu tương tác qua lại giữa người dùng với server. Mặt khác, đối với những bạn làm SEO, Marketing thì Google đã đưa ra thông báo rằng HTTPS sẽ là một tiêu chí để xếp hạng website. Nghĩa là khi đưa ra kết quả cho người tìm kiếm, trang web có SSL sẽ được ưu tiên hơn trang web cùng loại nhưng không có SSL.

Vậy còn chờ gì nữa mà không trang bị cho website của bạn SSL ngay nhỉ?

Công tác chuẩn bị để cài đặt SSL cho website trong Nodejs

Để thực hiện được theo hướng dẫn này, bạn cần có:

  • Nodejs: Bạn cần có kiến thức cơ bản về lập trình với Nodejs. Có thể tham khảo tại trang chủ Nodejs.org.
  • OpenSSL: Một công cụ giúp bạn tạo khóa và chứng chỉ
  • ExpressJS (npm i express): Một nền tảng giúp bạn khởi tạo webserver trong Nodejs. Tham khảo thêm tại Expressjs.com
  • https: Tất nhiên cũng cần phải tìm hiểu về nó chứ đúng không?

Chứng chỉ SSL có một cặp khóa: khóa chung và khóa riêng. Các khóa này hoạt động cùng nhau để thiết lập kết nối được mã hóa. Chứng chỉ cũng chứa những thông tin về danh tính của chủ sở hữu chứng chỉ/ trang web. Để nhận được một chứng chỉ, bạn phải tạo một Certificate Signing Request trên server của mình. Vầ đây là bài hướng dẫn của chúng ta.

Tạo project và khởi tạo server với Express

Công việc trước tiên là cần phải khởi tạo thư mục Project. Trong thư mục này không có quá nhiều file đâu. Chỉ cần có:

  • Package.json: Tập tin khởi tạo trong Nodejs
  • key.pem: Dùng để tạo khóa cho SSL
  • cert.pem: Tạo chứng chỉ cho SSL
  • server.js: Khởi tạo Server để kiểm tra chứng chỉ

Vậy, hãy tạo một thư mục kiểu như node-https chẳng hạn. Sau đó sử dụng lệnh cd node-https để chuyển con trỏ nháy vào thư mục này. Tiếp tục dùng lệnh npm init -y để hệ thống tự tạo file package.json cho chúng ta.

Tiếp theo cần cài đặt Express bằng lệnh npm i --save express. Sau đó tạo tập tin server.js và thêm đoạn lệnh sau:

Bây giờ bạn thử chạy lệnh node server.js và bật trình duyệt gõ localhost:3000 xem sao. 😉

Tạo key.pem và cert.pem

Chúng ta sẽ sử dụng OpenSSL để khởi tạo hai tập tin key.pem và cert.pem bằng lệnh sau: (Chú ý chạy lệnh này bên trong thư mục chứa tập tin server.js nhé)
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
Trong đó:

  • -keyout: đây là cờ cho Openssl biết nơi chúng ta sẽ lưu khóa. Cụ thể là tập tin key.pem.
  • -out: đây là cờ cho Openssl biết nơi chúng ta lưu chứng chỉ. Cụ thể là tập tin cert.pem
  • -day: đây là cờ cho Openssl biết số ngày chứng chỉ tồn tại.

Nếu chạy lệnh trên thành công, bạn sẽ nhìn thấy hai tập tin key.pem và cert.pem được tạo. Sau đó mở tập tin Server.js và chỉnh sửa lại code như sau:

Sau đó lưu lại và tiến hành kiểm tra lại bằng lệnh node server.js và mở trình duyệt lên. Nếu trên trình duyệt xuất hiện dòng chữ Hello world là bạn đã thành công.

Lưu ý

Có thể bạn sẽ thấy cảnh báo SSL trên trình duyệt. Đừng lo lắng, đó là vì chứng chỉ của bạn chưa được xác thực bởi bất cứ tổ chức nào. Những gì bạn cần làm tiếp theo là thêm chứng chỉ như là một ngoại lệ cho trình duyệt là xong.

Toàn bộ nội dung bài viết trên được dịch của tác giả Abdus Samad. Với mục đích việt hóa và lưu trữ phục vụ cho các bạn tiện tra cứu.- https://abdusdev.me/

Mở rộng với người dùng WordPress

Đối với các bạn sử dụng WordPress thì có rất nhiều plugin hỗ trợ tạo SSL cho website. Ở đây mình gợi ý sử dụng Really Simple SSL Bởi Rogier Lankhorst, Mark Wolters. Việc cài đặt và cấu hình cực kỳ đơn giản.

Really Simple SSL

Với ba bước đơn giản:

  • Get an SSL certificate (can’t do that for you, sorry).
  • Activate this plugin
  • Enable SSL with one click

Nếu bạn gặp khó khăn trong việc lấy chứng chỉ SSL thì bạn có thể sử dụng trực tiếp từ host của các nhà cung cấp dịch vụ. Hiện tại, nhiều nhà cung cấp đã có gói sử dụng SSL cho các bạn.

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

Nguyễn Trung Hiếu

Một blogger ... cùi bắp! Đơn giản: tôi muốn ghi lại những gì xảy ra xung quanh, cả công việc lẫn cuộc sống và chia sẻ với các bạn đọc. Nếu bạn cảm thấy bài viết có nhiều điểm không chính xác, hãy comment và chia sẻ để tôi còn được học hỏi từ những góp ý của bạn. Email: hieunt.dcn@gmail.com