为1C配置Kerberos认证:Linux Web服务器与Windows应用服务器
在Linux Web服务器上发布1C数据库,并使用Windows应用服务器时,标准认证设置指南往往不够用。即使应用服务器的技术日志显示Web服务器传递了用户账户,平台仍会提示输入登录凭据。根本原因在于运行1C应用服务器的服务账户缺少SPN记录。
大多数教程都遗漏了这一细节,包括Infostart上的热门文章。解决方案是通过研究Linux和Windows中的Kerberos认证实验发现的。
基础设施要求
该场景假设:
- 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。
诊断步骤:
- 为1C服务账户(例如
svc_1c)运行setspn -Q /。 - 验证输出中是否缺少SPN。
- 通过支持NTLM的浏览器(IE/Edge在内网区域)测试访问。
- 检查Web服务器日志:
grep -i kerberos /var/log/apache2/error.log。
解决方案:添加SPN记录
为运行应用服务器的服务账户创建SPN记录。SPN值是任意的——它不用于流量,但为1C的内部认证逻辑所需。
在DC或带有RSAT的机器上运行命令:
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
暂无评论。