只想在进行SSL连接(http post)时验证:
https://www.example.com/some/path?customer_key=123123123
如果您不希望任何人知道customer_key,即使我正在建立https连接,这种方法也不会有效?
我想要保护的所有数据都必须在请求正文中吗?
答案 0 :(得分:36)
引用HTTPS RFC:
TLS握手完成后。然后客户端可以启动 第一个HTTP请求。所有HTTP数据必须作为TLS“应用程序发送 数据”。
基本上,首先建立安全SSL / TLS信道。只有这时才使用HTTP协议。这将使用SSL保护所有HTTP流量,包括HTTP标头(包含URL和cookie)。
握手中可见的是主机名本身,因为它包含在服务器证书中,在握手中可以清楚地看到(并且通过查看目标IP地址通常很容易猜出主机名) )。
使用服务器名称指示时,请求的主机名也应显示在server_name
消息的ClientHello
扩展名中。
否则,如果证书对多个主机名有效(例如,多个主题Alt。名称或通配符),则可能存在一些模糊性(对于窃听者)从证书中猜测主机名。在这种情况下,窃听来自客户端的DNS请求可能会给攻击者一个线索。
阅读其他人的回答和评论,有些人提到了有关Referer
(在规范中丢失了r
)和日志的问题。
剩下的潜在弱点之一是如何您将该链接提供给用户。如果它嵌入在通过普通HTTP提供的网页中,那么任何能够阅读该页面的人都能够看到它。您也应该通过HTTPS提供此类页面。如果您通过电子邮件发送该链接,我会说所有赌注都已关闭,因为邮件服务器很少加密它们之间的连接,用户也经常访问他们的电子邮件帐户而不加密。
编辑:
此外,如果您正在使用客户端证书身份验证,则在初始握手期间协商客户端证书将是可见的。这可能会泄漏访问网站的用户的名称(通常主题DN包含用户名)。如果在重新协商的握手期间发送客户端证书,则该证书将不可见。
答案 1 :(得分:7)
窥探者只能看到www.example.com
。请求的路径部分受SSL / TLS保护。
显然,您还需要通过HTTPS发送原始超链接。
答案 2 :(得分:3)
请求数据将在建立安全连接后发送,所以不用担心上面的URL,但记住你的数据没有加密,只有服务器和客户端之间的通道是加密的,如果可以破解这个通道,那么可以清楚地看到你的数据。
SSL是数据之上的包装器加密通道。如果数据很简单,任何可以破解SSL的人都可以清楚地看到您的数据。
答案 3 :(得分:1)
修改我对NO的回答! 显然,在建立SSL连接之前,只有主机名以明文形式发送。
答案 4 :(得分:0)
那取决于......
如果您使用数据包嗅探器,则无法看到通过线路发送的数据。这种方法的主要问题是请求URL通常以纯文本形式保存在服务器的日志中,浏览器历史记录保留URL,URL在Referrer头中传递,并且可能由第三方服务(谷歌分析)保留。