代理认证的工作原理
应用连接到代理服务器后,代理会先检查应用提供的认证信息,再转发流量。使用 HTTP 代理时,如果未提供认证信息或认证信息无效,通常会返回:
HTTP/1.1 407 Proxy Authentication Required
客户端随后携带 Proxy-Authorization 请求头重试。在 Basic 认证中,username:password 会经过 Base64 编码,但不会加密。该请求头由代理处理,目标网站通常收不到。如果 SOCKS5 代理启用了认证,认证会在 SOCKS 握手期间完成,而不是通过 HTTP 请求头完成。
密码认证与 IP 白名单
用户名和密码认证适用于网络经常变化的环境。IP 白名单则根据连接代理时使用的公网 IP 授予访问权限。
| 方式 | 适用场景 | 主要限制 |
|---|---|---|
| 用户名和密码 | 笔记本电脑、服务器或 IP 经常变化的环境 | 认证信息必须安全保存 |
| IP 白名单 | 使用固定公网 IP 的服务器 | 客户端 IP 变化后会失效 |
代理服务可以要求使用任一种方式,也可以将两者结合使用。
安全配置认证信息
-
使用正确的端点。 复制主机、端口、用户名和密码。代理认证信息与网站登录信息相互独立。
-
优先使用专用的认证信息字段。 这样可以避免 URL 解析问题。如果应用要求填写代理 URL,请对认证信息中的
@、:和#等字符进行百分号编码。 -
测试单个请求。 使用占位符,避免在 shell 历史记录中留下生产环境的认证信息。
curl --proxy http://HOST:PORT --proxy-user 'USERNAME:PASSWORD' https://example.com/ -
保护认证信息。 不要将认证信息提交到源代码管理系统,也不要在日志中输出。如果服务提供经 TLS 加密的代理端点,请使用该端点,因为目标网站的 HTTPS 无法加密客户端与代理之间以明文传输的认证信息。
出现 407 Proxy Authentication Required 响应,说明代理没有收到可接受的认证信息。
FlashIP 的代理认证
连接 FlashIP 轮换住宅代理时,需要使用提供的主机、端口、用户名和密码。静态 ISP 代理和数据中心代理也采用用户名和密码认证。请从控制台复制这些信息,粘贴到工具的代理字段中,不要手动重新输入。
常见问题
代理认证和登录网站是一回事吗?
不是。代理认证让应用获得代理的使用权限。代理转发请求后,网站登录还要使用单独的认证信息、Cookie 或令牌。
为什么代理密码正确,仍然出现 407?
客户端可能没有把认证信息发送到正确的主机和端口。检查代理认证字段,删除无意输入的空格,并确认客户端如何处理特殊字符。
代理认证会加密或隐藏流量吗?
不会。代理认证只控制谁可以使用代理。流量是否加密取决于连接协议,而代理会改变网站看到的 IP 地址。