如何在MacOS上存储代理凭证,以便系统服务使用它们?


14

我在公司NTLM代理后面使用macOS Sierra 10.12.6。我的浏览器和其他应用程序正在使用系统代理设置,在其中保存了我的用户名和密码,以便通过代理进行身份验证。一切正常。

系统服务一直存在一个问题,这些问题试图访问Internet上的信息,但看不到我的用户帐户中的代理凭据的访问权。我每隔几分钟就会看到以下弹出窗口,无论我做什么(在“系统偏好设置”中更新我的凭据,或按“不立即”),弹出窗口都会不断出现:

需要代理身份验证

弹出窗口中的文本显示为:

需要代理身份验证

在系统偏好设置中输入HTTP代理的密码http://xxx.xxx.xxx.xxx:yyyy

我该怎么做才能阻止此弹出窗口出现?

到目前为止我尝试过的事情:

  • 更新了我在“系统偏好设置”中的凭据(“ 网络”>“高级”>“代理”
  • 将凭证条目从我的登录钥匙串复制到系统钥匙串,因为我在博客文章或论坛问题中阅读了有关此建议的内容。

这些都不起作用,我每隔几分钟就会收到一次弹出窗口,似乎没有显示出来的模式。

更新1:

通过单击以上对话框中的“ 系统偏好设置”按钮输入我的凭据(例如,可以通过打开Safari并开始在“位置”框中键入URL来强制输入),在登录钥匙串中会创建两条记录,两者均相同内容:

@ xxx.xxx.xxx.xxx(用户名)Internet密码今天09:10-登录

两条记录看起来相同,但名称和属性相同。两者都显示请求此操作的应用程序是AuthBrokerAgent

钥匙串访问控制

更新2:

我也尝试过以下建议:https : //discussions.apple.com/message/23848961#message23848961,将身份验证条目从登录钥匙串复制到系统钥匙串,然后重新启动,但没有解决。实际上,在键入此内容时,再次出现了可怕的“需要代理身份验证”框。

更新3:

我使用Wireshark来查看计算机与代理之间的流量:

  • 由于我们的代理使用的是NTLM,因此代理返回以407 Proxy Authentication RequiredProxy-Authenticate: NTLM,这与我的期望相符。
  • 我在流量中看到的一些示例(例如iCloud)然后发回NTLMSSP_NEGOTIATE响应。
  • 代理返回NTLMSSP_CHALLENGE请求
  • 服务以NTLMSSP_AUTH和我的用户名作为响应,它必须是从某个地方获取的。
  • 代理最终以 200 Connection established

对我来说,这表明通常,如果系统可以从某个地方获取用户名和代理,则代理身份验证可以正常工作。问题仍然是如何/在何处存储用户名/密码,以便所有系统服务都能找到它。某些系统服务(我假设)没有任何方法可以在我当前将其存储的地方找到代理凭证。



您正在使用什么代理?我记得(过去的生活不同)我们使用的代理能够禁止存储密码,从而迫使用户每次都进行身份验证。可能是这种情况。
艾伦

1
您是否解决了此问题,因为我偶尔会遇到相同的问题,并且正在连接到Citrix VPN解决方案。一旦弹出窗口出现,它就会一遍又一遍地发生,最终我的AD帐户将被锁定。我尚未找到解决此问题的解决方案。由于我使用的是MacBook Pro,并且IT部门的大多数部门都是基于Windows的,因此我无法从IT部门获得任何有用的信息。连接到VPN后,我将在Solaris SPARC服务器上运行的Oracle应用程序上工作。我真的希望您找到解决此问题的方法。stan
Stan Repetta

抱歉,尚未找到解决方案。我最终要做的是,将不要求任何按钮的窗口移到屏幕旁边,以要求代理凭据,这至少使其保持安静……
nwinkler

Answers:


9

如果您的系统/网络管理员配置了不仅仅需要基本身份验证方案的代理强制身份验证,这很可能是预期的行为。

在Microsoft页面的“ 关于HTTP身份验证”部分的“ 处理身份验证 ”中:

认证方案有两种常规类型:

  • 基本身份验证方案,其中用户名和密码以明文形式发送到服务器。
  • 质询-响应方案,允许质询-响应格式。

质询响应方案可实现更安全的身份验证。如果请求要求使用质询-响应方案进行身份验证,则将适当的状态代码和Authenticate标头返回给客户端。然后,客户端必须通过协商重新发送请求。服务器将返回带有质询的适当状态代码,然后客户端将要求使用适当的响应重新发送请求,以获取请求的服务。

如果您使用的代理使用基本身份验证方案,则钥匙串中保存的内容足以对您进行身份验证。如果使用质询响应方案,您很可能必须提供更多信息-在这种情况下-重新输入密码-进行身份验证;这就是您所看到的。

NTLM身份验证过程

这不仅仅是存储凭证。客户端必须基于服务器生成的请求来生成响应。以下是根据Microsoft文档从客户端/服务器角度对身份验证过程进行的非常简短的描述

  • 客户端将用户名发送到服务器(以纯文本格式)。
  • 服务器生成一个16字节的随机数(称为质询或随机数),并将其发送给客户端。
  • 客户端使用用户密码的哈希值对该挑战进行加密,并将结果返回给服务器。这称为响应。
  • 服务器将以下三个项目发送到域控制器:

    • 用户名
    • 挑战发送给客户
    • 收到客户回应
  • DC验证加密的质询和响应。如果通过身份验证,则授予访问权限。

上面的第三步,要求客户端对从服务器获取的随机数进行哈希处理。 本质上,这意味着您的macOS客户端上没有任何存储。

至少,您需要加入Active Directory域。这意味着您需要为特定组织启用并正确配置Kerberos支持。

我在上面链接的“处理身份验证”文档中有一个关键词:

如果需要身份验证,则在对HttpOpenRequest的调用中应使用INTERNET_FLAG_KEEP_CONNECTION标志。NTLM和其他类型的身份验证需要INTERNET_FLAG_KEEP_CONNECTION标志,以便在完成身份验证过程时保持连接。如果未保持连接,则必须使用代理或服务器重新启动身份验证过程。

(强调我的)

根据出现的症状,您的组织似乎需要对代理进行身份验证;您的用户名/密码有效,但仍在(重新)进行身份验证。可能是因为您丢失了连接状态,而不得不重新做一次。这进一步强调了这一点。

要解决此问题,您将需要与网络管理员联系以协助您解决身份验证问题。


1
如何找出正在使用的身份验证方案?当应用程序与代理进行对话时,是否可以查看HTTP标头?我可以在Chrome的网络控制台中执行此操作,还是必须使用Wireshark之​​类的工具?
nwinkler

您很有可能需要使用Wireshark。请记住,它也可能是加密的流量。
艾伦

1
我已经从Wireshark中看到的信息中添加了一些信息。
nwinkler

1
感谢您为答案添加有关NTLM的更多信息。我了解NTLM,从Wireshark输出中可以看到它正在运行-您所描述的挑战/响应正在完成,例如对于Dropbox或iCloud服务。我仍然不确定哪个服务会弹出重复的代理凭据对话框。您的答案包含很多信息,但到目前为止并没有真正帮助我。
nwinkler

1
Connection Established!= Access Granted。可以确认您正在执行此操作的人员是您IT部门中的系统/网络管理员。
艾伦


-2

从运行以下命令Console.app

networksetup -setwebproxy "Your Interface Name" "web proxy hostname or IP" 
8080 on username password

系统将询问您有关钥匙串访问的信息。同意将记录添加到钥匙串中,钥匙串打开时,您将始终无密码访问


1
我已经尝试过了,但是不能解决问题。该命令为我的用户设置代理配置,并将身份验证存储在用户的login钥匙串中。完成此操作后,上面显示的代理身份验证对话框再次弹出。您建议的修复无法为我解决问题。
nwinkler

因为您的登录钥匙串被锁定或您有重复记录
Siarhei Karatkevich

1
登录钥匙串已解锁,我仔细检查了一下。但是,关于重复记录的观点可能是有效的。我删除了在登录和系统钥匙串中找到的所有用于代理身份验证的记录,但是,一旦在原始帖子的对话框中输入密码一次,我就会在登录钥匙串中得到两条记录,两者都完全相同相同的数据。如果我删除了一个,则当我再次输入我的凭据时它会回来。
nwinkler

1
我尝试了security您列出的命令-它找不到任何东西。如果我将find-generic-password命令更改为find-internet-password,它会执行操作,因为“钥匙串”以“ Internet密码”类型列出了该条目。
nwinkler

1
代理URL设置为xxx.xxx.xxx.xxx,这就是它的工作方式,例如从命令行。我将尝试使用Wireshark捕获一些东西。
nwinkler
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.