Hỏi SSL: Moi người cho mình hỏi, hiện tại mình thấy có 2 dạng handle SSL cho server:
Một là ở app level, ví dụ khi init một cái HTTP server thì chỉ định luôn SSL cert, ví dụ:
err := http.ListenAndServeTLS(“:443”, “server.crt”, “server.key”, nil)
Một cách khác là handle ở Nginx (về lý thuyết chắc nó cũng là app level nhỉ):
server { listen 443 ssl; server_name www.example.com; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key;
Còn dạng thứ hai là dùng SSL thông qua gateway provider như Cloudflare, hay Heroku.
Không biết ưu nhược điểm của từng cách trên là như thế nào nhỉ?
3 kiểu trên thật ra cũng là dạng 1 cái app nào đó load cert lên rồi handleshake client request thôi. Khác nhau chính là setup ở layer nào thôi
Khác nhau cách 1 và 2/3 là:
- 1 là App level hoặc có thể hiểu là Business level
- 2/3 là dạng proxy level. Lúc này proxy service (nginx/cloudflare,aws certificates + gateway) sẽ keep connection tới server bằng bất cứ kiểu gì, ko nhất thiết phải là https
Khác nhau cách 1/2 và 3 là:
- Tự mình handle/configure
- External provider service
Ưu nhược
- Cách 1:
- Ưu điểm:
- Gọn, nhẹ, 1 binary/docker có thể có tất cả.
- Không cần setup thêm service ngoài để làm ssl
- Có thể custom code để làm nhiều trò theo ý thích
- Nhược:
- Mix giữa business level và connection level
- Về căn bản thì nhiều business app không care tới ssl gì, allowanced domains support là gì, vì nó ko phải trách nhiệm của app
- Renew invalid các kiểu manually. Hoặc nếu tự động thì phải có cơ chế expitre + re-load
- Hạn chế khi share certificate, hoặc proxy 1 request vào nhiều app
- Cách 2:
- Ưu điểm: * Tách business level ra khỏi infra level * Dễ dàng setup 1 proxy nhiều ssl để routing nhiều app khác nhau * Dễ dàng setup 1 proxy 1 ssl để routing routing khác nhau * Khi cần thay thế/renew thì chỉ thay đổi/configure proxy level thôi, ko cần stop business level * Đa phần support hết case rồi, chỉ học cách configure thôi
-
Nhược điểm: * Phải setup service riêng để handle request trước khi nó vào app * Nếu làm mấy thứ phức tạp quá (VD build 1 cái proxy service đem bán) thì nhiều khi ko support hết, phải tự viết thêm * Phải học cách config nhiều để turning performance
- Cách 3:
- Ưu điểm:
- Infra nhà người ta, mình ko cần mantain
- Configure đễ hơn cách 2
- Có nhiều món ăn kèm như chống ddos, cache bla bla mà ko cần setup/plugin thêm
- External provider sẽ face ra internet chứ ko phải cụm server của mình. Nên nếu có gì sảy ra thì external provider sẽ bị tấn công chứ ko phải mình
- Nhược điểm
- Tiền khi nhu cầu vượt basic
- Mình không quản lý/control hết tất cả
- Phải setup cái flow hợp lý khi dev/test/prod
- Không phải cái gì cũng như mình muốn, mà mình phải follow cái nó cung cấp
Source: webuild