2013年3月15日 星期五

https 加密 http uri 與 response data

常有人好奇我們的瀏覽器 https 究竟保護了哪些資料呢? 而 http 的 GET/POST/DELETE 等 method 在 header 有沒有加密?

從 OSI model 來想,tls(ssl) 在 session layer, http 在之上的 application layer,因此知道 tls(ssl) 完整保護了 header 跟 response body data

從 python socket programming 來看,會是先建 socket 到 server host/ip 以及 port 443,再加上 ssl wrapper 後,才對 server 送出 GET /PATH/TO/URI 然後收到 response 資料,因此也可以理解 https 連線保護了 http uri 跟傳輸的網頁內容,竊聽者除了知道我們跟哪一台主機、跟 port 連線外(tcp/ip header),除非真正解密,或找到其他安全漏洞,否則無法知道連線內容。

參考程式碼:
    https://github.com/sjh/python/blob/master/demo_https_ssl_encryption_parts.py