HTTPS傳輸Header值是否會被竊取?


#1

大家好,

假設要跟別人做資料串接,
在 Header 自行定義了 key 與 value ,
透過定義的 key 值確認是否為對方呼叫,
使用 HTTPS 做資料傳遞,
請問這樣 Header 是否安全?
是否會被他人惡意竊取走 key 值呢?

謝謝大家! :sweat:


#2

嗯, https 連網址都有加密的,你說呢 : )

我寫一下我記得的順序,ssl 是公私鑰加密,所以 3 way handshake 完後雙方換 public key 給對方,用對方的 public key 加密封包後才給對方,到對方那邊後才用自己的 private key 來解開,so~~

https 會外漏的應該只有對方 IP 之類的,或是弱加密演算法,不然整套應該都是安全的就是了


#3

@jokercatz
不好意思,想再詢問,
若提供 API 給對方串接,除了鎖 IP 外,
有哪些方式能認證是對方呼叫而非有心人士亂打呢?
謝謝您! :confounded:


#4

抱歉最近都在忙,所以晚回了一點

"亂打"這是一個有趣的問題,要用起承轉合開始來看

DN (=A=>) DNS => IP (=B=>) HOST (=C=>) SERVER

A 轉送段,你可以把 DNS 丟給類似 cloudflare 做代管,可以防止大部分的 tor / bot / DOS 攻擊,且 IP 會過一次水,原始 IP 不會被暴露在外

B 轉送段,你可以限制只有 cloudflare 的 IP 且為你指定的 domain name 才吃,還有把 checksum 之類的放到 header 而非 body 內,缺 header 的一律不給過,可以躲掉大量 IP 掃描攻擊,這樣你已經完成 80% 左右了,不過請記得要把 cloudflare 封包內帶的 client 端的真實 IP 導正才行,否則你的 server 會取到 cloudflare 的 IP 哩

C 轉送段,過濾 body 長度,檢查 checksum,檢查格式 …

大概這樣就 ok 了才是,而如果是手機 API 的話, server & client 應該各產一把 key 來當 private key,然後把 public key 丟給對方來存,中間的訊息都要用 key 來加密即可(其實就是自己做 SSL 的機制就是了),並且控制每把 key 的使用量,否則反編譯後大概都會出事唄

額外的東西:建立跳板機,所以的機器的 ssh 只吃跳板機的 IP,而跳板機的機制看要用 VPN / OTP 還是怎樣的過濾就隨你們了,這樣可以讓管理介面收斂到統一入口處,而不是每個都是打點

做到上面這些後應該就怕自己本身 code 的穩定度和旁路攻擊了,別人看到這架構應該不會太囉唆就是,因為剩下的…除了自己的安全性要做得更好些,大概都要花錢買主機了唄

至於你問的如果是 API 加密機制的話,金流大部分都採用 checksum 模式,最近在玩 amazon 的 API 給你看一下 doc,你可以反著做即可,他寫的滿漂亮的給你參考哩

http://docs.aws.amazon.com/AWSECommerceService/latest/DG/rest-signature.html

基本上有 checksum 就 ok 了(要找一個頁面顯示 private key 給對方看,你可以去申請看看看別人怎麼做先),剩下的看要放哪裡,類似 Line BOT API 是規定一定要正規的 HTTPS(要有付費簽章的,免費 / 自簽都不收) + checksum 放 header 內而已

再來還看過的有類似使用 KEY 去做加密的,就我上面寫的 private key 來做 verify 而已,還有類似發票公司或你所說的不進行驗證,但嚴格 IP 限定,其餘沒了哩

對了,剛想到,API 內最好要有 “timestamp”,否則封包可被重送攻擊,這點要記住就是了, amazon 的那組也有哩 X"D