我正在努力获得从机器A到运行SQL Server的机器B的SQL Server连接.
我已经广泛搜索了所有我发现的东西都没有用.他们也没有引导你逐步解决这个问题.
我们不使用Kerberos,而是使用配置的NTLM.
涉及的机器是(xx用于隐藏某些机器名称以用于安全目的):
以下SPN已在DC(xxPRODSVR001)上注册.出于安全考虑,我用yyy模糊了域名:
已注册的ServicePrincipalNames为CN = xxDEVSVR002,CN = Computers,DC = yyy,DC = local:
Run Code Online (Sandbox Code Playgroud)MSSQLSvc/xxDEVSVR002.yyy.local:49298 MSSQLSvc/xxDEVSVR002.yyy.local:TFS RestrictedKrbHost/xxDEVSVR002 RestrictedKrbHost/xxDEVSVR002.yyy.local Hyper-V Replica Service/xxDEVSVR002 Hyper-V Replica Service/xxDEVSVR002.yyy.local Microsoft Virtual System Migration Service/xxDEVSVR002 Microsoft Virtual System Migration Service/xxDEVSVR002.yyy.local Microsoft Virtual Console Service/xxDEVSVR002 Microsoft Virtual Console Service/xxDEVSVR002.yyy.local SMTPSVC/xxDEVSVR002 SMTPSVC/xxDEVSVR002.yyy.local WSMAN/xxDEVSVR002 WSMAN/xxDEVSVR002.yyy.local Dfsr-12F9A27C-BF97-4787-9364-D31B6C55EB04/xxDEVSVR002.yyy.local TERMSRV/xxDEVSVR002 TERMSRV/xxDEVSVR002.yyy.local HOST/xxDEVSVR002 HOST/xxDEVSVR002.yyy.local
已注册的ServicePrincipalNames为CN = xxDEVSVR003,CN = Computers,DC = yyy,DC = local:
Run Code Online (Sandbox Code Playgroud)MSSQLSvc/xxDEVSVR003.yyy.local:1433 …
我已经设置了一个具有读取和写入服务主体名称权限的SQL Server服务帐户。当SQL Server启动时,我在日志中收到预期的消息,表明该服务帐户已成功注册了SPN:
SQL Server网络接口库已成功为SQL Server服务注册了服务主体名称(SPN)[MySPN]。
与数据库服务器的连接按预期使用Kerberos身份验证,并且一切正常。
但是,当我关闭SQL Server时,会在日志中输入一条消息,表明无法注销SPN:
SQL Server网络接口库无法注销SQL Server服务的服务主体名称(SPN)[MySPN]。错误:0x6d3,状态:4.管理员应手动注销此SPN,以避免客户端身份验证错误。
我检查了是否没有重复的SPN,并检查了SPN是否已注册到正确的服务帐户,并且仅注册到了该帐户。服务器已重新启动几次。Microsoft的Kerberos Config Manager不提供任何见解。
我不明白为什么允许该服务帐户创建SPN但不允许删除它。
我现在正在使用GSSAPI来破解跨平台应用程序.虽然我不清楚UPN和SPN之间的区别.
开发环境是CentOS 6.4上的Samba4 AD DC服务器,Windows服务器2008 R2是域中的成员盒,例如EXAMPLE.COM(您可能很好奇为什么不直接使用Win2008作为DC.正如我之前所说,应用程序是跨平台的,我现在正在测试这个设置.正常的Win DC-Linux MEM设置工作正常.).我创建了一个新用户foobar:users
来运行该应用程序.当我使用foobar@EXAMPLE.COM
UPN来验证针对Kerberos的应用程序时,我一直在接收
Kerberos:Principal可能不会充当服务器错误
在Samba maillist上的一个帖子之后,我想我应该app/dc.example.com
为UPN 创建一个服务主体名称samba-tool
samba-tool spn add app/dc.example.com foobar
Run Code Online (Sandbox Code Playgroud)
这次我会收到另一个错误
Samba4 KDC - 在hdb中找不到这样的条目
我的问题是UPN和SPN之间有什么区别?通过samba-tool spn list foobar
,它说foobar
具有 servicePrincipalName app/dc.example.com
.我怎么能将UPN与SPN联系起来?
非常感谢你.
我有一个运行本地Windows帐户的Windows服务托管的wcf应用程序.我是否需要为此帐户设置SPN?如果是这样,SPN需要设置的协议是什么?我知道如何通过HTTP为服务做这个,但从来没有为net.tcp做过.
我正在收到"没有端点监听net.pipe:// localhost"错误,如其他地方所述,但我似乎无法找到真正的答案.
这是问题的一个很好的标识:http: //kennyw.com/indigo/102
使用WCF时,Windows身份验证是通过SSPI-Negotiate执行的,在大多数情况下,它将选择Kerberos作为实际的身份验证机制.但是,如果传递给SSPI的目标SPN是本地计算机帐户的格式良好的SPN(例如主机/ [dns机器名称]),那么Negotiate将使用NTLM(环回优化),并且访问令牌将不具有网络SID(和因此可以与NetNamedPipes一起使用).
但它并没有告诉我如何解决这个问题.我以编程方式创建我的端点.
var binding = new NetNamedPipeBinding();
binding.Security.Mode = NetNamedPipeSecurityMode.Transport;
binding.Security.Transport.ProtectionLevel = ProtectionLevel.EncryptAndSign;
var id = EndpointIdentity.CreateSpnIdentity("host/" + Environment.MachineName);
var endpointAddress = new EndpointAddress(new Uri(serviceClientUrl), id);
var client = new ServiceClient(binding, endpointAddress);
Run Code Online (Sandbox Code Playgroud)
我猜我的问题出在CreateSpnIdentity中,但我不确定要使用什么值.
附加信息: 详细说明这一点以获取更多背景信息.Wcf服务作为在NetworkService帐户下运行的Windows服务托管(我尝试过本地系统).使用默认的NetNamedPipeBinding构造函数创建服务:
host.AddServiceEndpoint(typeof(IService), new NetNamedPipeBinding(), "ServiceName");
Run Code Online (Sandbox Code Playgroud)
我创建了一个使用此服务的SharePoint Webpart.问题是,如果SharePoint站点设置为基于表单的身份验证,或者只是在Windows身份验证下的URL中使用了计算机名称,那么就没有问题.仅当在Windows身份验证下将完全限定的计算机名用于URL时才会出现上述错误.
我很确定这与文章中描述的NTLM Kerberos问题有关,但我不确定如何绕过它.
首先,使用setspn命令为用户注册服务主体名称。
setspn -a CS/dummy@abc.com虚拟用户
setspn -l虚拟用户
给出输出为
CS/dummy@abc.com
接下来,当使用/ mapUser选项执行ktpass命令时,将修改用户帐户的服务主体名称,以便删除域组件。
ktpass / pass Password @ 123 -out dummy.1.keytab -princ CS/dummy@abc.com -crypto DES-CBC-MD5 + DumpSalt -ptype KRB5_NT_PRINCIPAL + desOnly / mapOp set / mapUser dummyuser
setspn -l虚拟用户
给出输出为
CS /虚拟
以下两个命令是否正确并且以相同的方式工作?
setspn -a CS /虚拟虚拟用户
setspn -a CS/dummy@abc.com虚拟用户
在SPN中指定服务名称时,是否也必须包含域组件?你能澄清一下吗?
我无法通过我的ansible主机验证AD到Windows机器.我有一张有效的kerberos票 -
klist
Credentials cache: FILE:/tmp/krb5cc_1000
Principal: ansible@SOMEDOMAIN.LOCAL
Issued Expires Principal
Mar 10 09:15:27 2017 Mar 10 19:15:24 2017 krbtgt/SOMEDOMAIN.LOCAL@SOMEDOMAIN.LOCAL
Run Code Online (Sandbox Code Playgroud)
我的kerberos配置对我来说很好看 -
cat /etc/krb5.conf
[libdefaults]
default_realm = SOMEDOMAIN.LOCAL
# dns_lookup_realm = true
# dns_lookup_kdc = true
# ticket_lifetime = 24h
# renew_lifetime = 7d
# forwardable = true
# The following krb5.conf variables are only for MIT Kerberos.
# kdc_timesync = 1
# forwardable = true
# proxiable = true
# The following encryption type specification will be used by …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下命令添加服务主体名称,该命令用于Windows身份验证。
setspn –a HTTP/Kerberos.com domain\username
Run Code Online (Sandbox Code Playgroud)
我有一个在IIS服务器上运行的站点,该站点在连接到域控制器计算机的Windows 2008服务器上运行。
我是否必须setspn
在IIS服务器或域控制器上运行命令?
在SharePoint安装文档中,我说它,
如果对SQL Server服务帐户使用域用户帐户,则必须确保其环境中存在该帐户的有效服务主体名称(SPN)和数据库服务器上的SQL Server实例.无论您是否对Office SharePoint Server 2007使用NTLM或Kerberos身份验证,情况都是如此.
您必须使用Setspn.exe命令行工具在域中为该帐户配置SPN.默认情况下,在运行Windows Server 2008的计算机上安装Setspn.exe.在与用户/服务帐户加入同一域的计算机上运行以下命令.
setspn -a <http/<farmclusterdnsname> <serviceaccountname>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,参数应该是什么?
我想serviceaccountname将是'domain\username',但不确定第一个参数应该是什么.
我试图了解Kerberos的基本概念.我在这里读到了关于这里的原理,通常看起来像:
primary/instance@REALM
Run Code Online (Sandbox Code Playgroud)
我想问一下什么是主要的,实例和领域.当然,上面的页面和互联网上的其他几个地方都有定义,但有人可以举个例子吗?
我的理解是:主要是消费者(用户或服务).实例是用于访问控制的东西.主要可以是多个实例的一部分.Realm是实例的集合?如果我错了,请纠正我.
如果我有一台服务器:foo.bar.com
,我可以拥有2个领域:REALM1,REALM2.这些可以这样命名吗?或者我可以在这里只有1个领域作为FOO.BAR.COM?
现在我说3个服务:s1,s2,s3相互通信.由于启用了kerberos,它们中的每一个都必须拥有一个带有自己的keytab文件的主体?或者由于每个服务都与其他服务进行通信,每个keytab文件是否需要为其他服务都有主体?
spn ×10
kerberos ×7
keytab ×2
sql-server ×2
wcf ×2
ansible ×1
gssapi ×1
mit-kerberos ×1
samba ×1
security ×1
sharepoint ×1
sspi ×1
tfs ×1