在URL中传递HTTP基本身份验证凭据和加密

264

我有一个关于HTTPS和HTTP身份验证凭据的问题。

假设我使用HTTP身份验证来保护一个URL:

<Directory /var/www/webcallback>
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /var/www/passwd/passwords
Require user gooduser
</Directory>

我随后通过 HTTPS 从远程系统访问该URL,并在URL中传递凭据:

https://gooduser:secretpassword@www.example.com/webcallback?foo=bar

用户名和密码会自动进行SSL加密吗?对于GET和POST也是这样吗?我很难找到可信的信息来源。


1
相关:https URL 中的用户名和密码 - Hawkeye Parker
非常古老的问题,但仍然需要注意:https://www.ietf.org/rfc/rfc3986.txt已经弃用了该方法:“在用户信息字段中使用“user:password”格式已被弃用。” - Madbreaks
3个回答

245

用户名和密码会自动使用SSL加密吗?GET和POST请求是否也是如此?

是的,都会进行SSL加密。

当使用SSL时,整个通信过程(除非主机名的IP已经被缓存,否则包括DNS查找)都会进行加密。


26
GET和POST请求,包括URL,都是加密的。我只想补充一点,像Firebug和Tamper数据这样的工具能够显示未加密的结果,*仅仅因为它们是浏览器的一部分,并且能够在请求被加密之前拦截请求。一旦通过网络发送,所有内容都是加密的。 - Sripathi Krishnan
22
明确一点,除了域名以外的所有内容都是加密的。如果有人偶然看到这个并想要更详细的答案,请参见 http://answers.google.com/answers/threadview/id/758002.html。 - rcourtna
7
为了完整起见,“Internet Explorer 不支持在网站地址(HTTP 或 HTTPS URL)中使用用户名和密码”。看起来只有 Internet Explorer 版本 3.0 到 6.0 支持以下 HTTP 或 HTTPS URL 的语法:http(s)://username:password@server/resource.ext注意:此默认行为的更改不影响其他协议。例如,在安装了 832894 安全更新后,仍然可以在 FTP URL 中包含用户信息。 - Luke

29

是的,它将被加密。

如果你查看背后发生了什么,你就会明白。

  1. 浏览器或应用程序将首先分解URL,并使用DNS查询获取主机的IP地址。也就是说:一个DNS请求将被发出以查找域名(www.example.com)的IP地址。请注意,此请求不会发送任何其他信息。
  2. 浏览器或应用程序将使用从DNS请求中收到的IP地址启动SSL连接。证书将进行交换,这是在传输层级别上发生的。此时不会传输任何应用程序级别的信息。请记住,基本身份验证是HTTP的一部分,而HTTP是一个应用程序级别的协议。不是传输层的任务
  3. 在建立SSL连接之后,现在必要的数据将传递给服务器。即:路径或URL、参数和基本身份验证的用户名和密码。

-2

并不一定是真的。虽然它在传输过程中会被加密,但它仍然以明文形式记录在日志中。


20
哪个网络服务器会记录用户请求中的用户名和密码?那将是一个极不安全的网络服务器。 - Andrew Barber
1
是的,这不是真的。可能可以指示Apache记录此信息,但默认情况下肯定不会这样做。 - DougW
28
@Brandon可能认为"in URL"指的是查询字符串中的内容(例如,?user=bob&pw=123hackmeplz)。这可能会被记录在服务器日志中。 - Mike Graf
5
相关:当你在客户端使用curl调用URL时,用户名和密码将清晰地显示在进程列表中,并可能出现在bash历史文件中。 - https://dev59.com/NG445IYBdhLWcg3wNXk_#4981309 - Hawkeye Parker
这个答案是对提问者非常重要的提示。您不应该在URL中传递凭据,因为凭据可能会出现在某些日志中。因此,即使这不是原始问题的答案,我也会给一个UPVOTE。 - Szymon Wygnański
1
是的,我同意@SzymonWygnański的观点,我也给了一个赞同。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接