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.
Dưới đây là hướng dẫn bảo mật API service chạy trên container với các chứng chỉ SSL/TSL:
Chúng tôi sẽ tạo ví dụ một Spring boot project và 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.