我们在 OSX 10.10 Yosemite + Server.app v4 上创建了一个 Open Directory 主服务器:
$ sudo slapconfig -createldapmasterandadmin admin Administrator 1000
但它不支持DIGEST-MD5
:
$ ldapsearch -x -LLL -b "" -s base supportedSASLMechanisms
dn:
supportedSASLMechanisms: GSSAPI
supportedSASLMechanisms: CRAM-MD5
哪一个一个问题因为用户无法进行身份验证collabd
(针对个人资料/设备管理器或 Wiki):
<Error>: [CSAuthService.m:326 667e000 +86ms] Digest did not validate
<Error>: [CSServiceDispatcher.m:261 667e000 +0ms] Caught exception "Invalid Credentials" [CSAuthBadDigest] executing [http]Request{AuthService.validateUsernameAndPasswordDigest:remember:(<<scrubbed>>)}:
(
0 CoreFoundation 0x00007fff8d35c64c __exceptionPreprocess + 172
1 libobjc.A.dylib 0x00007fff92ec76de objc_exception_throw + 43
2 CSService 0x000000010425fc90 -[CSAuthService sessionForDigest:remember:] + 1681
3 CSService 0x000000010425f5a7 -[CSAuthService validateUsernameAndPasswordDigest:remember:] + 65
4 CoreFoundation 0x00007fff8d23533c __invoking___ + 140
5 CoreFoundation 0x00007fff8d235192 -[NSInvocation invoke] + 290
6 CSService 0x00000001041dce3d -[CSServiceDispatcher executeRequest:asPartOfBatch:usingServiceImpl:] + 4774
7 CSService 0x00000001041dd91e __43-[CSServiceDispatcher executeBatchRequest:]_block_invoke_3 + 83
8 CSService 0x00000001041e2a22 -[NSArray(CollabBlockMethods) map:] + 249
9 CSService 0x00000001041dd877 __43-[CSServiceDispatcher executeBatchRequest:]_block_invoke_2 + 160
10 CSService 0x00000001041e3100 +[CSExecutionTimer recordTime:ofBlock:] + 74
11 CSService 0x00000001041e2f3b +[CSExecutionTimer timerNamed:aroundBlock:] + 76
12 CSService 0x00000001041dd5c4 __43-[CSServiceDispatcher executeBatchRequest:]_block_invoke + 323
13 PostgreSQLClient 0x00000001041400b3 -[PGCConnection transactionInBlock:onError:] + 149
14 CSService 0x00000001041dd3fa -[CSServiceDispatcher executeBatchRequest:] + 277
15 CSService 0x0000000104253aab +[CSServiceDispatchHTTPRouter routeServiceRequest:response:] + 1024
16 CSService 0x00000001041e399e __21-[CSServiceBase init]_block_invoke_6 + 48
17 CSService 0x0000000104250af4 __53-[CSRoutingHTTPConnection httpResponseForMethod:URI:]_block_invoke + 92
18 CSService 0x00000001042540ea -[CSHTTPBackgroundResponse bounce:] + 284
19 Foundation 0x00007fff8e14cb7a __NSThread__main__ + 1345
20 libsystem_pthread.dylib 0x00007fff9ad2f2fc _pthread_body + 131
21 libsystem_pthread.dylib 0x00007fff9ad2f279 _pthread_body + 0
22 libsystem_pthread.dylib 0x00007fff9ad2d4b1 thread_start + 13
)
如何启用DIGEST-MD5
?
答案1
尝试列出密码服务器支持的哈希类型
pwpolicy -n /LDAPv3/127.0.0.1 -getglobalhashtypes
...并查看它是否包含 RECOVERABLE(我相信 DIGEST-MD5 和 WEBDAV-DIGEST 都需要它)(请注意,这不会列出 GSSAPI/Kerberos,因为这由单独的服务处理)。不幸的是,我没有办法立即测试它,但如果缺少它,请尝试:
pwpolicy -n /LDAPv3/127.0.0.1 -a admin -setglobalhashtypes RECOVERABLE on
...看看是否添加了所需的身份验证机制。请注意,这在下次更改密码之前不会应用于个人用户。
答案2
这是我在 OS X 10.11.6 和 Server 5.1.7 上解决此登录问题的方法。这些步骤还解决了其他几个问题,例如由于信任问题、用户权限问题或无法联系服务器等而无法安装配置文件。
从https://support.apple.com/en-us/HT200018:
检查 DNS:
打开终端并输入主机名来验证您的服务器的名称。
打开 Server.app 并在侧栏中选择您的服务器。
选择“概述”选项卡。您的服务器的完全限定域名应显示在“主机名”字段中。
如果“服务器”窗口中的合格域名与 hostname 命令的结果不匹配,则需要先更正此问题,然后再继续本文中的后续步骤。如果您确定分配给服务器 IP 地址的完全合格域名是正确的,请使用服务器中的更改主机名助手为您的服务器设置正确的主机名。
打开系统偏好设置并单击网络图标。
选择已为您的服务器配置的网络接口。您的服务器的 IP 地址列在此处。
请记下列出的 DNS 服务器。
如果您已经在服务器上配置了 DNS 服务器,并且已经为该服务器创建了 DNS 记录,那么您的服务器应该列为 127.0.0.1(而不是服务器的 IP 地址)。
如果您网络上的另一台服务器正在托管您的服务器的 DNS 记录,则该服务器的 IP 地址应列在 DNS 服务器字段中。
如果此信息不正确,请单击“高级…”按钮,然后单击“DNS”选项卡。可以在此处设置正确的 DNS 服务器地址。
测试您的 DNS 设置
您可以使用终端测试名称到 IP 地址的解析。打开终端 (/Applications/Utilities/Terminal.app) 并使用以下命令:
使用“host”命令测试名称到ip地址的解析:
host <your server's fully qualified domain name>
预期输出是具有地址您还可以使用“host”命令来测试IP地址到名称解析:
host <your ip address>
预期输出是.in-addr.arpa域名指针
除此之外,默认网络访问应设置为所有网络,我不确定这是否有帮助,但在设置中打开 Apple 推送通知是我采取的另一个步骤(MDM 在一定程度上依赖于推送)。
此外,如果您在 .local 域名上托管,那么分配给您服务器的证书也必须由您计算机上的 Open Directory 证书颁发机构签名(否则您当然希望使用由实际证书颁发机构签名的证书)。OS X 服务器版本 5 在自动将证书分配给包括网站在内的各种服务方面存在一些令人讨厌的错误。我必须手动创建一个新证书,如下所示,在下面的 rekerberize 步骤之前,我执行了以下步骤来重置系统的证书:
(可选)在全新备份系统后,关闭所有服务器服务并从 Open Directory 中删除主服务器,重新开始。然后转到证书并删除除任何自定义网站的特殊证书之外的所有证书。还要转到 /etc/certificates 并确保其中没有任何未显示在服务器应用程序中的恶意证书(如果有,请移至临时文件夹或删除)。
接下来,在 OS X Server 应用程序中,如果您还没有这样做,请关闭所有服务。然后转到 OS X Server 应用程序并执行证书 > + > 创建证书身份...
对于名称,我输入了我的主机名,但您可以在此处输入任何内容。身份类型:Leaf。证书类型:SSL 服务器。选中“让我覆盖默认值”。单击“继续”。
对于序列号,请选择您尚未使用过的序列号。单击继续。
对于名称(通用名称),请确保它与您的主机名匹配。其余的都不重要。按继续。
对于证书颁发机构,请选择包含文本“Open Directory 证书颁发机构”的证书颁发机构,该文本应在您首次设置 Open Directory 时创建。按继续。
设置证书的位大小(2048 RSA 即可)。
在密钥使用扩展中,确保选择密钥加密和密钥协议。按继续。
在密钥使用扩展中,确保选择 SSL 客户端身份验证和 PKINIT 客户端身份验证(这可能并不重要,但我确实在 iPad 日志中看到一个错误,表明客户端需要证书,而当我重置所有内容并检查这一点时,它开始工作了。)按继续。
跳过基本约束扩展。按“继续”。
在主题备用名称扩展中,确保 dDNSName 设置为您在 Apple 上述检查 DNS 步骤中验证的主机名。确保 IP 地址包含服务器的实际 IP。按继续。
验证并按 OK。现在新证书应该显示在 OS X 服务器的证书区域中。选择使用以下方式保护服务:> 自定义。在弹出的服务器证书框中,将所有服务(需要自己证书的自定义网站除外)的证书设置为新证书。
(可选)如果您在步骤 0 中删除了 Open Directory 主目录,请在此处创建一个新的主目录。至少确保 Open Directory 具有包含您本地 IP 范围的语言环境,例如 10.1.10.0/24 等。
接下来执行 Apple 提供的以下“rekerberize”步骤:
重新整理你的服务器:
sudo mkdir /var/db/openldap/migration sudo touch /var/db/openldap/migration/.rekerberize sudo slapconfig -firstboot
上面的最后一个终端命令将打开 Open Directory 服务器。返回服务器应用程序并确保 Open Directory 已打开。然后执行以下步骤(我认为前几个步骤只是为了确保它可以与 .local 服务器一起使用):
确保您的服务器的 DNS 服务器已配置了您的计算机主机名的条目,并将所有其他 DNS 请求转发到普通 DNS 服务器。(如果您的计算机使用 .local 域,这一点尤其重要。)添加您的主机名和 IP 的条目,然后打开 DNS 服务器。
现在打开网站。如果您仍处于测试阶段,并且您的服务器仍位于 .local 域名上,则双击服务器网站 (SSL) 并验证其 SSL 证书是否设置为我们上面创建的新证书。
打开配置文件管理器。将其设置为签署配置文件。显示的证书应该表明它已由中介机构签署。
在“用户”中,创建一个用于配置文件管理器的用户。所有使用配置文件管理器的用户必须位于“本地目录”中,而不是“本地网络目录”中......这非常重要......!原因是当您从 OS X Server(甚至是配置文件管理器)注销时,可能会导致卸载包含该用户数据的卷,从而阻止他们进一步登录。请参阅此 Apple 支持网站:https://support.apple.com/en-us/HT203325
在 Safari 中,登录到您的服务器的配置文件管理器。如果您打算从欢迎屏幕自动设置设备,则需要选中“所有人”组中的“允许在使用 Apple Configurator 配置的设备设置助理期间进行注册”复选框。(看这个 Spiceworks 帖子和回复。)。如果关闭此功能,则在“准备好的”设备上的欢迎屏幕过程中,用户的登录将失败,且没有任何解释。
现在,如果您使用 .local 服务器,那么要让 iPad 下载并安装配置文件,您需要执行以下步骤:
关闭 iPad 的蜂窝数据并转到 WiFi,并确保它与您的服务器位于同一子网。
如果 iPad 已设置好欢迎屏幕,请将 iPad 的 DNS 服务器设置为与上面检查 DNS 步骤中确定的主机名完全匹配(例如,mycomputer.local)。
或者
如果 iPad 位于欢迎屏幕上,并且它是使用配置器设置的受监管设备,可在设置时从您的 .local MDM 服务器下载配置文件,那么您需要在服务器上打开 Internet 共享以创建热点,并将其用于初始 WIFI 连接。请注意,这要求服务器正确设置其 DNS 服务器,如上文 Apple 支持网站的“检查 DNS”部分所述。
请注意:
• 从技术上讲,.local 地址是完全合格的域名。如果您的客户端与服务器位于同一 LAN 和子网中,那么只要服务器上激活了 Apple Push Notification 服务,并且服务器具有 .local 地址,一切就会正常。如果您设置了 Profile Manager,然后在 OS X Server 中关闭 APN,则系统不会提示您重新启用它,并且一切将开始失败。
• 如果您在设备日志中收到以下类型的错误:
Desc : The server certificate for “https://my-macbook-pro.local/devicemanagement/api/device/mdm_checkin” is invalid.
那么这是因为您的 iPad 不信任该证书。这可能意味着以下几种情况之一:
这可能意味着证书问题。请确保在 OS X Server 应用程序的配置文件管理器中启用了配置文件签名。如果没有启用,并且您不想启用它,则可能需要将根证书安装到设备上并信任它,方法是将其通过电子邮件发送到设备,或将其放在网站上,然后从该网站下载到设备上。顺便说一句,“根证书”是指签署中间根证书的证书,该中间根证书签署了用于签署远程管理配置文件的代码签名配置文件;您可以通过进入 Keychain Access 并查看证书的详细信息来查看哪个证书签署了哪个证书(据我所知,无法从 OS X Server 应用程序本身访问根证书)。(您可以将证书从 Keychain Access 导出为文件
.cer
,然后将其放在 中/Library/Server/Web/Data/Sites/Default/
,然后sudo chown _www:_www CertName.cer
,然后在 iPad 上导航到 ,从而将证书安装到 iOS 设备上myserver.local/CertName.cer
。)但是,如果我刚刚签署了证书,则不需要这样做。如果所有这些都失败了,那么请重复上述所有步骤,因为您可能在相关证书上使用了错误的 IP 或主机名或设置,或者 Kerberos 需要重置等。这可能意味着您的客户端没有将服务器的主机名用作其 DNS 服务器。请将其设置为拥有该服务器的主机名,或将其设置为使用服务器的 Internet 共享热点,如上文所述。
这个 Apple Discussions 主题,特别是 Linc Davis 的帖子,也非常有帮助:https://discussions.apple.com/message/30689429#30689429