返回首页

Linux Web 服务器上 1C 身份验证的 SPN

本文描述了 Web 服务器在 Linux 上、应用服务器在 Windows 上的 1C 身份验证问题的解决方案。关键是为主机服务帐户添加 SPN 记录。提供了 setspn、krb5 和 mod_auth_kerb 配置命令。

1C 身份验证修复:Linux+Windows 上的 SPN
Advertisement 728x90

为1C配置Kerberos认证:Linux Web服务器与Windows应用服务器

在Linux Web服务器上发布1C数据库,并使用Windows应用服务器时,标准认证设置指南往往不够用。即使应用服务器的技术日志显示Web服务器传递了用户账户,平台仍会提示输入登录凭据。根本原因在于运行1C应用服务器的服务账户缺少SPN记录。

大多数教程都遗漏了这一细节,包括Infostart上的热门文章。解决方案是通过研究Linux和Windows中的Kerberos认证实验发现的。

基础设施要求

该场景假设:

Google AdInline article slot
  • Linux上的Web服务器(Apache/Nginx)带有NTLM/Kerberos模块。
  • Windows Server上的1C应用服务器。
  • 用于账户管理的Active Directory(AD)。
  • 1C服务器上的IIS或类似服务来处理请求。

初步设置包括通过Web服务器发布数据库,配置mod_auth_kerb(对于Apache)或带有Lua脚本的nginx以传递认证头。1C日志显示传递的账户,但认证失败。

问题排查

检查应用服务器的技术日志(启动参数:-reg或通过集群控制台)。查找类似条目:

{User: domain\username} from web-server

如果账户可见但凭据提示持续出现,问题在于SPN。

Google AdInline article slot

诊断步骤:

  • 为1C服务账户(例如svc_1c)运行setspn -Q /
  • 验证输出中是否缺少SPN。
  • 通过支持NTLM的浏览器(IE/Edge在内网区域)测试访问。
  • 检查Web服务器日志:grep -i kerberos /var/log/apache2/error.log

解决方案:添加SPN记录

为运行应用服务器的服务账户创建SPN记录。SPN值是任意的——它不用于流量,但为1C的内部认证逻辑所需。

在DC或带有RSAT的机器上运行命令:

Google AdInline article slot
setspn -S HTTP/fakespn.svc_1c.domain.local svc_1c

其中:

  • HTTP/fakespn.svc_1c.domain.local是一个虚构的SPN。
  • svc_1c是1C服务账户。

使用setspn -L svc_1c验证。添加后,重启应用服务器并测试访问。

认证将在没有凭据提示的情况下工作。原因:1C平台在接收Kerberos/NTLM令牌前检查SPN。

额外Kerberos设置

  • Linux上的Keytab: 使用ktutil为服务主体HTTP/webserver.domain.local添加密钥。
  • krb5.conf:/etc/krb5.conf中指定领域和KDC。
[realms]
DOMAIN.LOCAL = {
kdc = dc.domain.local
}
  • Apache配置(mod_auth_kerb):
<Location /1c>
AuthType Kerberos
AuthName "Kerberos Login"
KrblAuthRealms DOMAIN.LOCAL
KrbMethodNegotiate On
KrbsaveCredentials Off
</Location>

关键要点

  • SPN是必需的: 即使是假的SPN也能解锁1C认证。
  • 日志用于调试: 使用1C技术日志和Web服务器error.log。
  • 服务账户: 在具有适当权限的域账户下运行1C服务器。
  • 测试: 在Linux上使用kinit验证Kerberos。
  • 安全: 将SPN限制在必要的服务上。

— Editorial Team

Advertisement 728x90

继续阅读