Articles of kerberos

在Windows中的浏览器中的Kerberos SSO身份validation

在公司networking中有一个使用kerberos单点login的网页。 我通过VPN连接到这个networking。 当使用Mac时,我只需在控制台kinit username@REALM.LOCAL中写入,我就可以得到票据,之后我可以在浏览器中打开网页并运行。 另一个故事发生在Windows上。 我有我的电脑,我不希望它成为公司领域的成员。 通过MIT Kerberos客户端我可以得到一张Kerberos票据,但是当然没有浏览器知道它的存在。 有没有办法将这张票据提供给Windows上的浏览器?

如何连接到需要Java的Windows客户端身份validation的REST服务?

我想从Java访问REST服务。 该服务在Windows下运行,并可能使用“默认”身份validation机制。 我被告知这是Kerberos与NTLM的后备。 我能够通过使用Firefox的简单的HTTPS GET请求访问服务(也适用于HttpRequester) – 没有明确指定任何凭据(显然我的Windows帐户使用)。 我怎样才能从Java访问服务? 天真的尝试使用java.net.URL读取失败,状态码为400。

更改kerberos票据caching位置

我在Windows 7上遇到了Kerberos问题。 我拥有的: 我在Windows 7上 在system32下,我有klist(来自MS Corp),但是我没有kinit 我有jdk8的klist和kinit,但没有包含在PATH环境variables中 我有一个在Hortonworks 32位ODBC驱动程序2.01顶部的ODBC数据源,并且该数据源依靠Kerberos身份validation 我观察到,当我目前的目录是jdk8 / bin: kinit可以创build票据,我得到:新的票据存储在caching文件C:\ Users [login] \ krb5cc_ [login] klist正确检测到该caching中的所有票证 我观察到,当我目前的目录不是jdk8 /斌: klist(system32的)不读取上面的caching文件 我想做的事: 有点:告诉ODBC驱动程序读取Java的Krbcaching,而不是系统的Krbcaching(此外,它位于哪里?) 我已经试过了: 添加指向caching文件的环境variablesKRB5CCNAME,但是没有。 有没有解决办法? 谢谢

需要通过GSSAPI来确定适当的SPN svn / svnserve身份validation以赢得2008 AD

我正在通过SVNSERVE设置一个基于Windows的Subversion安装程序,用户通过SASL和GSSAPI向Active Directory进行身份validation。 我知道有些提供商提供了Subversion的预打包安装,并且提供了开箱即用的集成AD支持,但是这些并不适合我的情况。 我使用Subversion 1.7.4 for Windows,MIT Kerberos V5(3.2.2)for Windows,并将从Win64盒子上的Tortoise SVN客户端访问存储库。 SVNSERVE作为域帐户下的系统服务运行。 对于我的存储库服务器,我相信我有所有的基本部分(svn,Kerberos,SVNSERVE推迟SASLauthentication,然后configuration为使用GSSAPI的机制)。 现在,我试图查询存储库的结果是“无法协商身份validation机制”,这是我所期望的 ,因为我还没有定义存储库主机的SPN来查询Kerberos。 networking捕获告诉我,spn“svn / * FQDN_of_host_omitted *不是一个可识别的SPN,这正是我所期望的。 所以,尽pipe我知道我需要一个SPN,但是我需要一些关于如何获得正确的 SPN的指导,因为在这个testing环境中我不能自己做(必须要求,所以我想确保我要求正确的组合)。 我的信念是我需要下面列出的SPN,但是如果有人能够证实我正确的方向,我将不胜感激。 我对于单纯是针对主机的svn服务还是针对主机的svn服务是通过指定的帐户还是两者都需要SPN感到困惑。 所以,我相信我可能需要以下一项或全部。 如果有的话,是对/错? #1 SPN for svn service on non-FQDN of host machine: setspn -F -A svn/*nonFQDN_of_host* *nonFQDN_of_host* #2 SPN for svn service on FQDN of host machine: setspn -F -A svn/*FQDN_of_host* […]

为什么Windows 8login到MS帐户后发送不同的授权标题

我们有什么? 客户端:win8,ie11,使用域凭据login到系统。 服务器:3个tomcat7节点运行超出apache 2.2.22。 应用程序使用华夫饼库来authentication以sso方式login到域的windows用户。 应用程序使用spring安全性和关于此主题的主要事件是通过表单处理login的filter来处理validation标头的filter。 NegotiateSecurityFilterProvider仅支持协商协议,而不支持NTLM 我们所做的? 通过直接链接进入应用程序: https : //app.domain.com/app_name/subordinates.do 。 没关系,我们正在携带有效的kerberos头(这是一个好的,大的kerberos令牌,其中fiddler描述为“Authorization Header(Negotiate)”似乎包含一张kerberos票据^^),并且在应用程序端的华夫饼通过我们与kerberos的回复。 登出。 通过login页面上的表单login:我们使用user_name和密码发送post请求,同样我们也使用相同的kerberos标记。 应用程序使用user_name和password在华夫饼WindowsAuthenticationProvider的帮助下login我们。 这里我们在我们丰富的NegotiateSecurityFilter之前得到authentication,所以在服务器的回复中没有任何kerberos头。 无论如何,一切都很好。 现在我们通过操作系统login到MS账户。 而魔法发生。 当试图通过直接链接login时,我们在login页面上得到“指定的句柄无效”错误,如SPRING_SECURITY_LAST_EXCEPTION常量。 我的猜测是,我们发送某种无效的授权标题 而当试图通过表单login时,我们得到“参数不正确”。 在这里我认为我们发送ntlmtypes1 POST请求与空身体,但我们仍然有无效的头,所以应用程序无法识别它,并不会发送401回复,此后华夫饼发送空名称到AD,这里出现错误(只是猜测) 但是当我转动提琴手看看发生了什么,然后一切都开始正常工作,像login到MS帐户之前。 好的,找出发送到服务器的头文件我在cmd文件中使用了一些代码: UDPATED添加代码和输出 var cookieContainer = new CookieContainer(); var authRequest = (HttpWebRequest) WebRequest.Create("https://app.domain.com/app_name/home.do"); var credentials = CredentialCache.DefaultNetworkCredentials; authRequest.Credentials = credentials; authRequest.CookieContainer = cookieContainer; authRequest.AllowAutoRedirect = false; var authResponse […]

HDFS WebUI Kerberos身份validation失败凭证无法从IE中find

我用kerberosauthentication来设置我的HDFS服务,那就是configuration: <property> <name>hadoop.http.filter.initializers</name> <value>org.apache.hadoop.security.AuthenticationFilterInitializer</value> </property> <property> <name>hadoop.http.authentication.type</name> <value>kerberos</value> </property> <property> <name>hadoop.http.authentication.simple.anonymous.allowed</name> <value>false</value> </property> <property> <name>hadoop.http.authentication.signature.secret.file</name> <value>/opt/hadoop/hdfs/default/etc/hadoop/hadoop-http-auth-signature-secret</value> </property> <property> <name>hadoop.http.authentication.kerberos.principal</name> <value>HTTP/192.168.47.143@CLOUD.LOCAL</value> </property> <property> <name>hadoop.http.authentication.kerberos.keytab</name>y4 <value>/opt/hadoop/hdfs/default/etc/hadoop/HTTP.keytab</value> </property> <property> <name>hadoop.http.authentication.cookie.domain</name>y4 <value>CLOUD.LOCAL</value> </property> 我可以通过运行testingLinux环境下的身份validation: $ kinit“HTTP/192.168.47.143@CLOUD.LOCAL” $ curl -k -v -u“HTTP/192.168.47.143@CLOUD.LOCAL” – 协商https:// …:50470 这返回好内容。 但是当我试图从Windows IE访问,它返回: GSSException:没有提供有效的凭据(机制级别:未能find任何Kerberos信封) 我已经将/etc/krb5.conf从服务器复制到C:\ Windows \ krb5.ini,并将主机名添加到安全区域。 还有什么我应该做的IE来识别在哪里find钥匙? 我甚至尝试安装MIT Kerberos应用程序( http://doc.mapr.com/display/MapR/Configuring+Kerberos+Authentication+for+Windows )启用身份validation环境,但它仍然无法正常工作,我没有现在的想法。

在DCOM中使用Kerberos时需要SPN吗?

我正在使用DCOM在Windowsnetworking上提供各种应用程序服务,使用Kerberos来处理身份validation。 系统通常工作正常,但我遇到从单独(可信)域访问服务的问题。 特别是,该服务无法对客户端应用程序进行callback,接收到“发生安全包特定错误”错误。 此外,如果我调整服务特别要求Kerberos身份validation(而不是使用SNEGO /协商),客户甚至不能调用服务器(再次收到“一个安全包特定的错误发生”)。 令人困惑的是,事情已经好几年没有问题了。 然而,与我们之前所做的相比,这里有一些不同之处。 首先,涉及的服务器运行Windows 2008,我以前没有使用过。 另外,如上所述,只有当服务从一个单独的域中的帐户访问时,错误才会发生,以前的用法从来没有尝试过。 现在问题:我没有使用这个DCOM服务的SPN(服务主体名称),但一些错误和事件日志让我觉得这可能是问题。 但是,我发现的所有文档都不清楚这是否正确,或者如果我确实需要,我将如何设置SPN。 有谁知道是否SPN是我在这里失踪? 如果是这样,你能指出我应该怎么做? 额外细节: 对于服务器设置为强制使用Kerberos身份validation的场景,打开“ 扩展RPCdebugging”function可以提供一些额外的线索。 客户端可以使用CoCreateInstanceEx成功连接,但如上所述调用服务接口失败。 RPC错误logging在位置140处显示错误,错误代码为0x80090303(“指定的目标是未知的或不可达的”),该logging的第三个参数是空string。 这指出一个缺失的SPN是罪魁祸首。

Java / SPNEGO:不需要的SPN规范化?

我目前正尝试使用SourceForge的SPNEGO库 (服务器使用相同的库)来实现Java客户端到SPNEGO保护的Web服务。 我不能得到它authentication成功,我的要求总是最终作为 HTTP/1.1 500 Failure unspecified at GSS-API level (Mechanism level: Checksum failed) 这与使用不合适主机名的浏览器访问Web服务时所得到的症状类似,而且事实上Wireshark中的一些debugging显示客户端发送的请求中包含错误的SPN – 我发送到service-test.client.com ,它被注册为SPN并在DNS中有一个Alogging,但是在Windows域中被注册为server-1234.client.corp 。 即使我将请求发送到http://service-test.client.com (请参阅匹配的Host头),Java请求票证的SPN是“内部”Windows名称: 从Chrome或IE发送的相同Host头和SPN: 由于在我的代码或SPNEGO库中没有任何翻译发生,所以我认为它必定发生在JRE中。 我一直在研究JGSS的来源,但是有点难以理解。 谁能告诉我如何跳过这个翻译,并获得正确的SPN的门票? 客户代码: SpnegoHttpURLConnection con = new SpnegoHttpURLConnection("spnego-client", user, password); con.connect(new URL("http://service-test.client.com:8083/service")); int rc = con.getResponseCode(); String msg = con.getResponseMessage();

HTTP 401.2来自远程机器的Windows身份validation的未授权错误

我的网站已启用Windows身份validation与协商提供程序首先列出我想要使用Kerberos进行委派。 当我从Web服务器本身的浏览器运行网站时,它工作正常。 当我从域中的另一台机器使用IE,我得到login框。 3次尝试后,我得到一个HTTP 401.2错误:未经授权。 我已经确保应用程序池使用的域帐户对网站文件夹具有“读取”和“执行”权限,我在login网站时login的域帐户也是这样(我也在“Authenticated Users '好措施)。 有趣的是,如果我尝试访问使用Web服务器的IP而不是名称的网站,它加载罚款。 任何人有想法?

Windows SSPI到Java GSSAPI的互操作性,以实现对EJB调用的SSO

我有在Windows机器上运行的Java客户机,它在Linux机器上运行的JBoss EAP / Wildfly上调用远程EJB。 我使用Kerberos来实现SSO。 Java客户端根据Windows域validation用户,并在EJB调用中将其身份传递给JBoss服务器。 我开始使用JAAS和内置的com.sun.security.auth.module.Krb5LoginModule 。 除了一件事以外,它正常工作:用户必须再次键入他的用户名和密码。 所以,这不是一个真正的SSO。 问题是Windows禁止从其LSA凭据caching导出Kerberos会话密钥。 可以通过在每台客户端机器上设置特定的Windowsregistry键来解决这个问题 – 但这是客户无法接受的。 所以我想find一个替代解决scheme。 我了解到Windows提供了可与Java使用的GSSAPI互操作的SSPI。 我使用Waffle库在客户端从Java访问SSPI。 在服务器上,我一直使用JAAS,因为它运行在Linux上,所以我不能在这里使用Waffle。 我也了解到,我不需要实现LoginModule,而是需要SASL客户端。 所以,我看看com.sun.security.sasl.gsskerb.GssKrb5Client是如何工作的,我试图用Waffle重新实现它。 第一步似乎正常工作 – 我从Waffle获得SSPI安全上下文,然后获取初始令牌并将其发送到服务器。 服务器接受令牌并用自己的令牌进行响应。 现在问题出现了。 在原始的SASL客户端中,“unwrap”操作用于从服务器令牌中提取数据,“wrap”操作用于创build要发送给服务器的回复令牌。 根据Microsoft文档, GSSAPI打包/解包操作应对应于SSPI EncryptMessage / DecryptMessage操作。 这两个方法在Waflle中不可用,但在NetAccountClient库中可用。 但是,我无法正确使用它们。 如果我使用单个SECBUFFER_STREAM,那么DecryptMessage是成功的,但是令牌的数据部分不会被提取,我不知道如何确定它开始的偏移量。 如果按照Microsoft文档的build议使用SECBUFFER_STREAM和SECBUFFER_DATA,则会出现以下错误: com.sun.jna.platform.win32.Win32Exception: The message or signature supplied for verification has been altered 我也试过其他的SECBUFFERtypes的其他组合,但没有成功。 任何想法我做错了什么? 到解包方法的源代码: public byte[] unwrap(byte[] wrapper) throws LoginException […]