+8

Bảo mật các API service chạy trên container với chứng chỉ SSL/ TSL

SSL/TLS là viết tắt của Secure Sockets Layer/Transport Layer Security, là một giao thức mã hóa dữ liệu được sử dụng để bảo mật giao tiếp giữa máy tính và một máy chủ, chẳng hạn như một trang web hoặc một REST API. Nó mã hóa dữ liệu trước khi gửi đi và giải mã dữ liệu khi nhận được, đảm bảo rằng thông tin giao tiếp giữa hai đầu cuối là bảo mật và không bị đánh cắp hoặc thay đổi trong quá trình truyền tải.

Để ví dụ, đầu tiên mình tạo 1 Spring boot project, và tạo một API đơn giản như sau.

Cấu trúc thư mục của project:

Run project và kiểm tra API, hiện tại API đang publish qua giao thức HTTP, chưa được bảo mật.

Làm cách nào để tạo chứng chỉ SSL/TSL tự ký?

Dùng keytool (một tool trong bộ JDK, nằm ở thư mục $JAVA_HOME/bin) để tạo ra 1 chứng thư tự ký ở định dạng PKCS 12. Chạy lệnh:

keytool -genkeypair -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore key-cert-anhdo.p12 -validity 365

Làm theo các chỉ dẫn trên command line, hoàn tất ta sẽ có một Certificate ở thư mục hiện tại. Copy chứng chỉ vào thư mục resource.

Sau đó thêm properties vào file application.properties

Chạy lại Spring boot app và truy cập vào https://localhost:8443 để kiểm tra.

Bảo mật các API service chạy trên Container với chứng chỉ SSL/TSL

Ngày nay, việc chạy các API service trong Container đã trở nên phổ biến đối và là tiêu chuẩn chung với các dự án phát triển theo kiến trúc microservices.

Để đưa các API service chạy trong các Container và publish các API service ra Internet một cách bảo mật, chúng ta cần phải có các Chứng chỉ SSL/TSL được cấp phát bởi các cơ quan cấp phát chứng thư (CA) tin tưởng. Các chứng chỉ SSL/TSL đó giúp xác thực domain trỏ tới API service và mã hóa thông tin khi gọi các API qua Internet.

Để đơn giản hóa quá trình đưa các API service chạy trong các Container và publish các API service ra Internet một cách bảo mật, các bạn có thể sử dụng các dịch vụ của AWS hoặc Google Cloud, Sunteco Cloud.

Trong bài viết này, mình hướng dẫn các bạn thao tác với Sunteco Cloud. Đây là một nhà cung cấp Cloud trong nước, nên các bạn không lo service của mình bị chậm do cá mập cắn cáp nhé.

Trước hết cần push Spring boot project của mình lên trên Docker Hub.

Tạo file Dockerfile để build project thành image

Sau đó chạy lệnh để build Dockerfile:

Push project lên Docker Hub

Nếu bạn chưa có account docker, hãy đăng ký 1 tài khoản trên docker hub, sau đó login qua command docker login

Chạy lệnh docker push để push image vừa tạo lên trên Docker Hub

Đưa API service lên chạy trong Sun Spinner

Các bạn đăng ký 1 tài khoản trên dashboard.sunteco.vn Việc này khá đơn giản, mình không nêu rõ ở đây nữa. Sau đó tạo một workspace.

Truy cập vào Workspace và tạo 1 Spinner Service:

Thao tác chọn image

Chọn image là image vừa được publish lên Docker hub:

Chọn Review & Deploy và Spinner nhanh chóng được tạo

Truy cập vào Spinner vừa được tạo và chọn vào mục App Publishing

Để publish App ra Internet sử dụng domain của Sunteco, chọn Internet Publish (using Sunteco domain) và nhấn New Route:

Tại màn hình Add New Route điền Route Name, và chọn Port name là port mapping vừa được tạo.

Ấn Save, là bạn đã tạo được 1 sub-domain có thể publish ra ngoài Internet. Sub-domain được tạo ra đã có sẵn một SSL/TSL xác thực cho domain đi kèm.

Vậy là xong, bạn đã có thể sử dụng URL đã được secure với SSL/TSL!

Trải nghiệm miễn phí Sunteco Cloud tại đây.


All rights reserved

Bình luận

Đăng nhập để bình luận
Avatar
@khanhngoc1993
thg 2 21, 2023 8:42 SA

bài viết hữu ích quá

Avatar
@lechauvn84
thg 2 24, 2023 3:41 SA

Dùng domain riêng của tôi trên Sunteco Cloud thì có được không?

Avatar

Hoàn toàn được bạn nhé! Trên bảng quản lý các dịch vụ ra Internet có sẵn chức năng thay đổi domain, bạn có thể lựa chọn giữa dùng domain riêng hoặc domain được cung cấp sẵn bởi Sunteco Cloud.

Avatar
@hienngm
thg 2 24, 2023 3:42 SA

Về SSL Certification, ngoài chức năng mã hoá SSL giúp bảo mật kết nối 2 bên hơn thì ý nghĩa "certification" còn ở việc tăng độ tin cậy về phía người sử dụng, là "giấy chứng nhận" cho máy chủ web. Các website có SSL certification được cấp bởi các CA chính thống sẽ được các browser tin cậy và cho hiển thị bình thường, thay vì đưa ra cảnh báo unsecure connection nếu sử dụng self-signed certificate. Tuy nhiên quá trình đăng ký mua, cài đặt gắn cert là hơi mất thời gian, sử dụng công cụ gắn cert như trên cũng tiện.

Avatar

Cảm ơn bạn đã góp ý!!

Avatar
@manhlh231
thg 2 24, 2023 3:47 SA

Tiện quá nhỉ, trước phải làm bằng tay mất cả ngày 👍️

Avatar
@anhtuan1x1
thg 2 24, 2023 3:50 SA

Bác có bài nào dành cho C# về chế độ bảo mật của SSL ko ?

Avatar

Mình chưa hiểu lắm, bạn nói cụ thể hơn được không?

Avatar
@Ms.Q
thg 2 24, 2023 4:31 SA

Dùng Sunteco cloud domain thì Certificate SSL/TSL xác thực cho route của tôi có thời hạn không nhỉ ?

Avatar

Bất cứ mọi SSL Certificate đều có thời hạn nhất định. Tuy vậy, nếu bạn sử dụng certificate sẵn trên Sunteco Cloud thì sẽ được gia hạn tự động trên hệ thống. Bạn sẽ không cần bận tâm về thời hạn của nó nữa.

Avatar
+8
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí