كيفية استخدام أسماء Spn عند تكوين تطبيقات الويب التي يتم استضافتها على "خدمات معلومات إنترنت"

ملخص

توضح هذه المقالة أسماء الخدمة الأساسية (Spn). توضح هذه المقالة أيضا كيفية استخدام أسماء Spn عندما تقوم بتكوين تطبيقات الويب التي يتم استضافتها على خدمات معلومات إنترنت (IIS) ل Microsoft. توضح هذه المقالة أيضا عملية التفاوض في مصادقة Windows المتكاملة. مفاوضة الأمان رأس يتيح عملاء حدد بين مصادقة NTLM ومصادقة Kerberos.

بالإضافة إلى ذلك، توضح هذه المقالة السيناريوهات الشائعة التي تتطلب SPN لتمكين مصادقة Kerberos. يصف المقطع الأخير من الحالات قد تفشل عملية مصادقة Kerberos. يوفر المقطع الأخير أيضا خطوات استكشاف الأخطاء وإصلاحها.

مقدمة

هام: تطبق المواضيع التي تمت مناقشتها في هذه المقالة لخدمات معلومات إنترنت (IIS) 6.0. المواضيع تنطبق أيضا على IIS 7.0 و 7.5 إذا تم تعطيل "مصادقة" الوضع Kernel بتعيين إعداد التكوين أوسيكيرنيلمودي إلى false.
توضح هذه المقالة خطوة بخطوة كيفية استخدام أسماء الخدمة الأساسية (Spn) عندما تقوم بتكوين تطبيقات الويب التي تتم استضافتها في IIS. تمرير IIS رأس مفاوضة الأمان عند استخدام مصادقة Windows المتكاملة للمصادقة على طلبات العميل. مفاوضة الأمان رأس يتيح عملاء حدد بين مصادقة NTLM ومصادقة Kerberos. تحديد عملية التفاوض مع مصادقة Kerberos إلا إذا تحقق أحد الشروط التالية:
  • لا أحد أنظمة متعلق بالمصادقة استخدام مصادقة Kerberos.
  • تطبيق الاستدعاء لا يوفر معلومات كافية لاستخدام مصادقة Kerberos.
لتمكين عملية التفاوض لتحديد بروتوكول Kerberos للمصادقة على شبكة الاتصال، يجب أن توفر تطبيق العميل SPN أو اسم مستخدم أساسي (UPN) أو اسم حساب NetBIOS اسم الهدف. إذا لم توفر اسم هدف في تطبيق العميل، لا يمكن استخدام عملية تفاوض بروتوكول Kerberos. إذا تعذر استخدام عملية تفاوض بروتوكول Kerberos، يحدد عملية تفاوض بروتوكول NTLM.

مزيد من المعلومات

مفاهيم

تعريف SPN

SPN هو الاسم الذي عميل فريد مثيل الخدمة. إذا قمت بتثبيت عدة مثيلات الخدمة على أجهزة الكمبيوتر ضمن مجموعة تفرعات، يجب أن يكون كل مثيل خدمة SPN الخاصة به. أن أسماء Spn متعددة مثيل خدمة معينة إذا كان هناك عدة أسماء العملاء قد المستخدمة للمصادقة. على سبيل المثال، يتضمن SPN دائماً اسم الكمبيوتر المضيف الذي يتم تشغيل مثيل الخدمة. لذلك، قد تسجيل مثيل خدمة SPN على كل الاسم أو الاسم المستعار للمضيف الخاص به.

فئة خدمة HTTP

يختلف عن فئة خدمة HTTP بروتوكول HTTP. البروتوكول HTTP والبروتوكول HTTPS استخدام فئة خدمة HTTP. فئة الخدمة هي السلسلة التي تعرف فئة الخدمة العامة. تتضمن أسماء فئة خدمة معروفة "www" لخدمة ويب و "ldap" لخدمة دليل. بشكل عام، يمكن أن يكون اسم فئة الخدمة أي سلسلة فريد لفئة الخدمة. يجب أن تدرك أن يستخدم بناء الجملة SPN حرف الخط مائل للأمام (/) لفصل العناصر. ولذلك، لا تظهر علامة الخط المائل للأمام (/) في اسم فئة خدمة.

فئة خدمة HTTP وخدمة المضيف

يمثل خدمة المضيف الكمبيوتر المضيف. يستخدم بروتوكول Kerberos SPN المضيف للوصول إلى الكمبيوتر المضيف. يستخدم بروتوكول Kerberos مفتاح طويل الأجل على الكمبيوتر المضيف لإنشاء تذكرة خدمة.

فئة خدمة HTTP هي واحدة من الخدمات المضمنة التي تعمل كاسم مستعار للمضيف SPN. يتم تعيين SPN المضيف لحساب الكمبيوتر المضيف. لذلك، عند استخدام فئة خدمة HTTP الافتراضي، يستخدم بروتوكول Kerberos حساب الكمبيوتر كحساب خدمة لطلب بطاقة خدمة.

السيناريوهات الشائعة

يصف هذا القسم على وحدات السيناريو التي قد تتطلب SPN. بالإضافة إلى ذلك، يوضح هذا القسم كيفية تحديد SPN أي تعيين لكل سيناريو. يتم استخدام المصطلحات التالية في هذه السيناريوهات:
IIS6server1اسم المضيف للكمبيوتر الذي يقوم بتشغيل IIS
mydomainالمجال الذي انضم الكمبيوتر IIS6server1
appPool1حساب المستخدم في مجال mydomain المستخدمة لمعرف تجمع التطبيقات
appPool2حساب المستخدم في مجال mydomain المستخدمة هوية تجمع التطبيق الثاني
www.test.comأول رأس المضيف لموقع ويب
www.test2.comالثاني رأس المضيف لموقع ويب
www.test3.comالثالث رأس المضيف لموقع ويب
www.myIIScluster.comاسم المجال المؤهل بالكامل لمجموعة من أجهزة الكمبيوتر التي تقوم بتشغيل IIS
www.myEXCHcluster.comاسم المجال المؤهل بالكامل لمجموعة من أجهزة الكمبيوتر التي تقوم بتشغيل Microsoft Exchange على IIS

أداة Setspn.exe

تمكنك الأداة Setspn.exe من قراءتها وتعديلها وحذفها خاصية الدليل SPN لحساب خدمة "Active Directory". يتم استخدام أسماء Spn لتحديد موقع اسم هدف أساسي لتشغيل خدمة. أداة SetSpn.exe يمكنك أيضا من عرض أسماء Spn الحالي أو إعادة تعيين أسماء Spn الافتراضية للحساب، وإضافة أو حذف أسماء Spn الإضافية.

للحصول على الأداة Setspn.exe لنظام التشغيل Microsoft Windows Server 2003، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
تحديث أداة دعم Setspn.exe 970536 ل Windows Server 2003

السيناريو 1: الوصول إلى تطبيق IIS عند تعديل هوية تجمع التطبيقات

عند تشغيل تطبيق IIS ضمن حساب مستخدم مجال بدلاً من تحت حساب خدمة شبكة الاتصال الافتراضية، يجب عليك تعيين SPN لخدمة HTTP ضمن حساب مجال. في هذا السيناريو، يمكنك الوصول إلى تطبيق IIS باستخدام اسم NetBIOS الملقم الذي يشغل IIS أو FQDN الملقم الذي يشغل IIS.

للوصول إلى تطبيق IIS باستخدام اسم NetBIOS، استخدم الأمر التالي، حيث يكون NETBIOS_NAME_OF_IIS_SERVER هو اسم NetBIOS الملقم الذي يشغل IIS:
Setspn – S HTTP/NETBIOS_NAME_OF_IIS_SERVER المجال \ اسم المستخدم
على سبيل المثال، قد يشبه الأمر الأمر التالي:
Setspn mydomain\appPool1 HTTP/iis6server1 – S
للوصول إلى تطبيق IIS باستخدام FQDN، استخدم الأمر التالي، حيث يكون FQDN_OF_IIS_SERVER هو FQDN الملقم الذي يشغل IIS:
Setspn – S HTTP/FQDN_OF_IIS_SERVER المجال \ اسم المستخدم
على سبيل المثال، قد يشبه الأمر الأمر التالي:
Setspn mydomain\appPool1 HTTP/iis6server1.mydomain.com – S

السيناريو 2: الوصول إلى تطبيق ويب باستخدام رأس المضيف

عند الوصول إلى تطبيق ويب باستخدام رأس مضيف، يجب عليك تعيين SPN لخدمة HTTP.

عند تشغيل تطبيق ويب ضمن حساب افتراضي مثل حساب النظام المحلي أو حساب الخدمة المحلية أو حساب خدمة شبكة الاتصال، يمكنك استخدام الأمر التالي:
Setspn – HTTP/HOST_HEADER NETBIOS_NAME_OF_IIS_SERVER
في هذا الأمر، هو HOST_HEADER رأس المضيف كتبت في إطار مستعرض للوصول إلى التطبيق و NETBIOS_NAME_OF_IIS_SERVER هو اسم NetBIOS الملقم الذي يشغل IIS.

على سبيل المثال، قد يشبه الأمر للتطبيق الأمر التالي:
Iis6server1 HTTP/www.test.com-Setspn
إذا قمت بتشغيل التطبيق تحت حساب مجال، يمكنك استخدام الأمر التالي:
Setspn – HTTP/HOSTHEADER_OR_DNS_ALIAS المجال \ اسم المستخدم
في هذا الأمر، هو HOSTHEADER_OR_DNS_ALIAS رأس المضيف أو اسم DNS المستعار الذي تستخدمه للوصول إلى تطبيق ويب.

على سبيل المثال، قد يشبه الأمر للتطبيق أحد الأوامر التالية:
  • Mydomain\appPool1 HTTP/www.test.com-Setspn
  • Mydomain\appPool2 HTTP/www.test3.com-Setspn

السيناريو 3: الوصول إلى تطبيق IIS في بيئة مقسمة أو موازنة التحميل

عند تشغيل IIS في بيئة مقسمة إلى كتل أو في بيئة لموازنة التحميل، يمكنك الوصول إلى تطبيقات باستخدام اسم الكتلة بدلاً من استخدام اسم عقده. يتضمن هذا السيناريو موازنة تحميل شبكة الاتصال. في تقنية الكتلة، يشير عقده بأحد أجهزة الكمبيوتر عضوا في نظام المجموعة. لاستخدام Kerberos كبروتوكول المصادقة في هذا السيناريو، يجب تكوين هوية تجمع التطبيق على كل عقده IIS استخدام نفس حساب مستخدم المجال. لتكوين كل عقده IIS استخدام نفس حساب مستخدم المجال، استخدم الأمر التالي:
Setspn – HTTP/CLUSTER_NAME المجال \ اسم المستخدم
على سبيل المثال، قد يشبه الأمر أحد الأوامر التالية:
  • Mydomain\appPool1 HTTP/www.myIISCluster.com-Setspn
  • Mydomain\appPool2 HTTP/www.myEXCHCluster.com-Setspn

السيناريو 4: استخدام SQL Server للوصول إلى تطبيق

أسماء Spn على ملقم الجهة الخلفية قد يلزم التحقق منها إذا كان تطبيق ويب IIS يتطلب الوصول إلى جهاز كمبيوتر الخلفية الذي يقوم بتشغيل SQL Server. قد لا تعمل تطبيقات الويب بشكل صحيح إذا تم تكوين أسماء Spn المطلوبة بشكل غير صحيح.

إذا كانت خلفية الكمبيوتر الذي يستخدم SQL Server قيد التشغيل ضمن حساب "النظام المحلي"، نقل MSSQLSvc/رقم المنفذFQDN_OF_SQL_SERVER:port يجب أن تكون متوفرة لاسم الكمبيوتر. استخدم الأمر التالي لتحديد أسماء Spn للكمبيوتر الذي يستخدم SQL Server:
لام-Setspn SQL_SERVER_COMPUTER_NAME
استخدم الأمر التالي لتعيين SPN لاسم الكمبيوتر الذي يقوم بتشغيل SQL Server:
Setspn – نقل MSSQLSvc/FQDN_OF_SQLSERVER:port SQLSERVER_COMPUTER_NAME
إذا كانت الخلفية الكمبيوتر الذي يستخدم SQL Server قيد التشغيل ضمن حساب مجال MSSQLSvc/FQDN_OF_SQL_SERVER:port رقم المنفذ يجب أن تتوفر لحساب المجال. استخدم الأمر التالي لتحديد أسماء Spn لحساب المجال:
المجال/اسم المستخدم-L Setspn
استخدم أحد الأوامر التالية لتعيين SPN لاسم الكمبيوتر الذي يقوم بتشغيل SQL Server:
  • Setspn – نقل MSSQLSvc/FQDN_OF_SQLSERVER:portFQDN_OF_SQLSERVER
  • Setspn – نقل MSSQLSvc/FQDN_OF_SQLSERVER:portاسم المستخدم \ المجال

البرنامج المساعد SPN

يمكنك استخدام نموذج البرنامج النصي التالي للبحث عن أسماء Spn لتطبيق IIS. يمكنك أيضا استخدام هذا البرنامج النصي للبحث عن أسماء Spn مكررة. لاستخدام هذا البرنامج النصي، اتبع الخطوات التالية:
  1. انقر فوق ابدأ، ثم انقر فوق تشغيل، اكتب "المفكرة"وثم انقر فوق موافق.
  2. في ملف "المفكرة"، قم بلصق البرنامج النصي التالي:
    Dim argSPN, argUser, argComputer, spnToSearch, objCategory, strFilter, searchCategory, domainInput
    Function Help()
    Dim strMessage
    strMessage = strMessage & "Usage:" & chr(13)
    strMessage = strMessage & "For accurate results run this script from the IIS server or a member server in the same domain as IIS server." & chr(13)
    strMessage = strMessage & "Check the article's failure scenarios and make sure no duplicate SPNs exist." & chr(13)
    strMessage = strMessage & "cscript spnHelper.vbs /f:spn /spn:HTTP/www.test.com /user:mydomain\apppool1" & chr(13)
    strMessage = strMessage & "cscript spnHelper.vbs /f:spn /spn:HTTP/www.test.com /computer:iis6server1" & chr(13)
    strMessage = strMessage & "cscript spnHelper.vbs /f:user /user:mydomain\apppool1" & chr(13)
    strMessage = strMessage & "cscript spnHelper.vbs /f:computer /computer:iis6server1" & chr(13)
    strMessage = strMessage & "cscript spnHelper.vbs /f:duplicatespn /spn:HTTP/www.test.com" & chr(13)
    strMessage = strMessage & "cscript spnHelper.vbs /f:requiredspn" & chr(13)
    MsgBox strMessage,,"SPN Helper"
    WScript.Quit
    End Function

    Function setArguments()
    argSPN = lcase(WScript.Arguments.Named("spn"))
    argUser = lcase(WScript.Arguments.Named("user"))
    argComputer = lcase(WScript.Arguments.Named("computer"))
    searchCategory = lcase(WScript.Arguments.Named("f"))
    if instr(argUser,"\")>0 then
    domainInput = ",DC=" & split(argUser,"\")(0)
    argUser = split(argUser,"\")(1)
    end if
    End Function

    Function resetValues()
    spnToSearch = ""
    objCategory = ""
    strFilter = ""
    End Function

    Function getGCPath()
    Dim tempGCPath, objGC, tempGC, tempStr
    Set objGC = GetObject("GC:")
    for each tempGC in objGC
    tempGCPath = tempGC.ADsPath
    next
    if tempGCPath <> "" then
    getGCPath = tempGCPath
    else
    WScript.Echo "Unable to find active directory"
    WScript.Quit
    end if
    For tempCounter=0 to UBound(split(lcase(split(getGCPath,"//")(1)),"."))
    If tempCounter = UBound(split(lcase(split(getGCPath,"//")(1)),".")) Then tempSeperator="" else tempSeperator = ","
    tempStr = tempStr & "DC=" & split(lcase(split(getGCPath,"//")(1)),".")(tempCounter) & tempSeperator
    Next
    getGCPath = tempGCPath & "/" & tempStr
    End Function

    Function getSPNClass()
    Dim tempSPNClass
    If trim(argSPN)="" Then getSPNClass = "*": Exit Function
    If instr(argSPN,"/")=0 Then getSPNClass = "*": Exit Function
    If instr(split(argSPN,"/")(0),"*")>0 Then getSPNClass = "*": Exit Function
    getSPNClass = split(argSPN,"/")(0)
    End Function

    Function isSPNInputValid(spnIN)
    isSPNInputValid = ""
    If instr(spnIN,"/")=0 Then Exit Function
    If instr(spnIN,"*")>0 Then Exit Function
    isSPNInputValid = spnIN
    End Function

    Function Main()
    Dim paramSPN
    paramSPN = ""
    call resetValues()
    call setArguments()
    Select Case searchCategory
    Case "spn"
    if (argUser = "" and argComputer = "") or (argUser <> "" and argComputer <> "") then WScript.Echo "You must use /spn along with /computer or /user": WScript.Quit
    if argSPN = "" then argSPN = "*"
    spnToSearch = "(servicePrincipalName=" & argSPN & ")"
    if argUser <> "" then objCategory = "(objectCategory=person)(sAMAccountName=" & argUser & ")"
    if argComputer <> "" then
    objCategory = "(objectCategory=computer)(cn=" & argComputer & ")"
    End If
    strFilter = "(&" & spnToSearch & objCategory & ")"
    Case "duplicatespn"
    If isSPNInputValid(argSPN)="" Then WScript.Echo "Invalid SPN input. Please verify and try again.": WScript.Quit
    spnToSearch = "(servicePrincipalName=" & argSPN & ")"
    strFilter = spnToSearch
    paramSPN = argSPN
    Case "requiredspn"
    call showRequiredSPNs("IIS")
    WScript.Quit
    Case "computer"
    objCategory = "(&(objectCategory=computer)(cn=" & argComputer & "))"
    strFilter = objCategory
    Case "user"
    objCategory = "(&(objectCategory=person)(sAMAccountName=" & argUser & "))"
    strFilter = objCategory
    Case else
    call Help()
    WScript.Quit
    End Select
    call getSPNs(paramSPN)
    End Function

    Function getPingResult(hostName,errorMessage)
    'On Error Resume Next
    getPingResult = ""
    If instr(hostName,".")=0 Then
    Dim tempGCPath, objGC, tempGC
    Set objGC = GetObject("GC:")
    for each tempGC in objGC
    tempGCPath = tempGC.ADsPath
    next
    if tempGCPath <> "" then
    gcPath = tempGCPath
    else
    WScript.Echo "Unable to find active directory"
    WScript.Quit
    end if
    Set adConn = CreateObject("ADODB.Connection")
    Set adCmd = CReateObject("ADODB.Command")
    adConn.Provider = "ADsDSOObject"
    adConn.Open "ADs Provider"
    Set adCmd.ActiveConnection = adConn
    adQuery = "<" + gcPath + ">;" & "(&(objectCategory=computer)(cn=" & hostName & "))" & ";dnsHostName;subtree"
    'WScript.Echo adQuery
    'WScript.Quit
    adCmd.CommandText = adQuery
    Set adRecordSet = adCmd.Execute
    if adRecordSet.RecordCount>0 Then
    If IsNull(adRecordSet.Fields("dnsHostName"))=0 Then
    getPingResult = adRecordSet.Fields("dnsHostName")
    hostName = getPingResult
    Else
    getPingResult = hostName
    End If
    else
    errorMessage = "Could not find " & hostname & " in the active directory"
    end if

    Exit Function
    End If
    getPingResult = hostName
    Exit Function
    'If Err Then getPingResult = hostName
    End Function

    Function getSPNs(spn)
    Dim spnClass, duplicateSPNArray
    spnClass = getSPNClass()
    duplicateSPNArray = ""
    gcPath = getGCPath()
    Set adConn = CreateObject("ADODB.Connection")
    Set adCmd = CreateObject("ADODB.Command")
    adConn.Provider = "ADsDSOObject"
    adConn.Open "ADs Provider"
    Set adCmd.ActiveConnection = adConn
    adQuery = "<" + gcPath + domainInput + ">;" & strFilter & ";distinguishedName,objectCategory,dnsHostName,servicePrincipalName,sAMAccountName;subtree"
    'WScript.Echo adQuery
    'WScript.Quit
    adCmd.CommandText = adQuery
    Set adRecordSet = adCmd.Execute
    if adRecordSet.EOF and adRecordSet.Bof Then
    WScript.echo "No " & searchCategory & " found with the given criteria."
    else
    If adRecordSet.RecordCount>10 Then
    If msgbox(adRecordSet.RecordCount & " Records are returned with the given criteria. Printing all of them might take a long time" & chr(13) & " Do you want to print all of them?",vbYesNo,"Kerberos")=vbNo Then Exit Function
    End If
    Do While not adRecordset.Eof
    If Err Then Exit Do
    WScript.echo "Class: " & split(split(adRecordSet.Fields("objectCategory"),",")(0),"=")(1)
    WScript.Echo adRecordSet.Fields("distinguishedName")
    if UCase(adRecordSet.Fields("objectCategory")) = "COMPUTER" Then
    WScript.echo "Computer Name" & adRecordSet.Fields("dnsHostName")
    else
    WScript.echo "User Name: " & adRecordSet.Fields("samAccountName")
    end if
    if instr(searchCategory,"spn")>0 Then
    spnCollection = adRecordSet.Fields("servicePrincipalName")
    for each individualSPN in spnCollection
    if spnClass="*" Then
    WScript.Echo Chr(9) + individualSPN
    else
    Select Case searchCategory
    Case "spn"
    if Lcase(split(individualSPN,"/")(0)) = lcase(spnClass) Then
    WScript.Echo Chr(9) + individualSPN
    end if
    Case "duplicatespn"
    if Lcase(individualSPN) = lcase(spn) Then
    duplicateSPNArray = duplicateSPNArray & Lcase(individualSPN) & " for " & split(split(adRecordSet.Fields("objectCategory"),",")(0),"=")(1) & ":" & adRecordSet.Fields("samAccountName") & Chr(29)
    end if
    Case "requiredspn"
    End Select
    End if
    next
    end if
    WScript.Echo
    adRecordSet.MoveNext
    Loop
    If searchCategory = "duplicatespn" Then
    If UBound(Split(duplicateSPNArray,Chr(29)))>1 Then
    WScript.Echo "Duplicate SPNs found"
    For tempDuplicateCount=0 to UBound(Split(duplicateSPNArray,Chr(29)))-1
    WScript.Echo Split(duplicateSPNArray,Chr(29))(tempDuplicateCount)
    Next
    End If
    End If
    WScript.Echo ""
    If adRecordset.RecordCount>1 Then WScript.Echo "Found " & adRecordset.RecordCount & " accounts" Else WScript.Echo "Found " & adRecordset.RecordCount & " account"
    end if
    adRecordset.Close
    adConn.Close
    If Err Then MsgBox Err.Message
    End Function

    Function getCategoryCount(myFilterValue, myFilterCategory)
    'This function accepts 2 parameters. First paramenter is the filter value and second param is filter category.
    'If you want to pass in your own filter string with various categories, you can pass "" as the second param.
    gcPath = getGCPath()
    searchCategory = myFilterCategory
    Select Case lcase(searchCategory)
    Case "spn"
    tempFilter = "(servicePrincipalName=" & myFilterValue & ")"
    Case "user"
    tempFilter = "(&(objectCategory=person)(sAMAccountName=" & myFilterValue & "))"
    Case "computer"
    tempFilter = "(&(objectCategory=computer)(cn=" & myFilterValue & "))"
    Case else
    tempFilter = myFilterValue
    End Select
    Dim tempCategoryCount
    tempCategoryCount = 0
    Set adConn = CreateObject("ADODB.Connection")
    Set adCmd = CReateObject("ADODB.Command")
    adConn.Provider = "ADsDSOObject"
    adConn.Open "ADs Provider"
    Set adCmd.ActiveConnection = adConn
    adQuery = "<" + gcPath + domainInput + ">;" & tempFilter & ";objectCategory,dnsHostName,servicePrincipalName,sAMAccountName;subtree"
    'WScript.Echo adQuery
    'WScript.Quit
    adCmd.CommandText = adQuery
    Set adRecordSet = adCmd.Execute
    if adRecordSet.EOF and adRecordSet.Bof Then
    else
    Do While not adRecordset.Eof
    If Err Then Exit Do
    if searchCategory = "spn" Then
    spnCollection = adRecordSet.Fields("servicePrincipalName")
    for each individualSPN in spnCollection
    If lcase(individualSPN) = lcase(myFilterValue) Then
    tempCategoryCount = tempCategoryCount + 1
    End If
    next
    else
    tempCategoryCount = tempCategoryCount + 1
    end if
    adRecordSet.MoveNext
    Loop
    end if
    getCategoryCount = tempCategoryCount
    adRecordset.Close
    adConn.Close
    End Function

    Function showRequiredSPNs(Product)
    Select Case Product
    Case "IIS"
    If MsgBox("Is IIS running in a Cluster or NLB",vbYesNo)=vbYes Then 'Running in Cluster or NLB is true
    strClusterName = InputBox("Enter the Cluster Name")
    If strClusterName = "" Then WScript.Quit
    If getPingResult(strClusterName,errorMessage)="" Then
    If MsgBox(errorMessage & ". Do you want to continue?",vbYesNo)<>vbYes Then WScript.Quit
    End If
    strDomainAccount = InputBox("Enter the Domain Account that the application pool is running under")
    If strDomainAccount = "" Then WScript.Quit
    strRequiredSPN = "HTTP/" & strClusterName
    If instr(strDomainAccount,"\") > 0 then
    If getCategoryCount(split(strDomainAccount,"\")(1), "user")=0 Then
    WScript.Echo "Domain account " & strDomainAccount & " does not exist"
    WScript.Quit
    End If
    Else
    If getCategoryCount(strDomainAccount, "user")=0 Then
    WScript.Echo "Domain account " & strDomainAccount & " does not exist"
    WScript.Quit
    End If
    End If
    If getCategoryCount(strRequiredSPN, "spn")>0 Then
    WScript.Echo "SPN " & " is already set. Use search option for finding the account that it is set for"
    WScript.Quit
    End If
    WScript.Echo "You need to set the SPN " & strRequiredSPN & " for domain account " & strDomainAccount
    Else
    If MsgBox("Is IIS application pool running under domain account",vbYesNo)=vbYes Then
    strHostName = InputBox("Enter the hostname or host header or FQDN that you use to access the application")
    If strHostName = "" Then WScript.Quit
    If getPingResult(strHostName,errorMessage)="" Then
    If MsgBox(errorMessage & ". Do you want to continue?",vbYesNo)<>vbYes Then WScript.Quit
    End If
    strDomainAccount = InputBox("Enter the Domain Account that the application pool is running under")
    If strDomainAccount = "" Then WScript.Quit
    If instr(strDomainAccount,"\") > 0 then
    If getCategoryCount(split(strDomainAccount,"\")(1), "user")=0 Then
    WScript.Echo "Domain account " & strDomainAccount & " does not exist"
    WScript.Quit
    End If
    Else
    If getCategoryCount(strDomainAccount, "user")=0 Then
    WScript.Echo "Domain account " & strDomainAccount & " does not exist"
    WScript.Quit
    End If
    End If
    strRequiredSPN = "HTTP/" & strHostName
    If getCategoryCount(strRequiredSPN, "spn")>0 Then
    WScript.Echo "SPN " & strSPNRequired & " is already set. Use search option for finding the account that it is set for"
    WScript.Quit
    Else
    WScript.Echo "You need to set SPN " & strRequiredSPN & " for domain account " & strDomainAccount
    WScript.Quit
    End If
    Else
    strHostName = InputBox("Enter the host header or FQDN that you use to access the application")
    If strHostName = "" Then WScript.Quit
    If getPingResult(strHostName,errorMessage)="" Then
    If MsgBox(errorMessage & ". Do you want to continue?",vbYesNo)<>vbYes Then WScript.Quit
    End If
    If MsgBox("Are you accessing the application with netbios name or FQDN or CNAME alias of IIS server?",vbYesNo)=vbYes Then
    strRequiredSPN = "host/" & strHostName
    If getCategoryCount(strRequiredSPN, "spn")>0 Then
    WScript.Echo "Required SPN " & strRequiredSPN & " is already set. Use search option for finding the account that it is set for"
    WScript.Quit
    Else
    WScript.Echo "You need to set SPN " & strRequiredSPN & " for IIS server's netbios name"
    WScript.Quit
    End If
    End If
    strHostHeader = InputBox("Enter the host header that you use to access the application")
    If strHostHeader = "" Then WScript.Quit
    strRequiredSPN = "http/" & strHostHeader
    If getCategoryCount(strSPNRequired, "spn")>0 Then
    WScript.Echo "A required SPN " & strSPNRequired & " is already set. Use search option to find the account the SPN is set to. If the required SPN is found under a different account, remove and add it to the IIS server's machine account."
    WScript.Quit
    Else
    WScript.Echo "You need to set SPN " & strRequiredSPN & " for IIS server's netbios name"
    WScript.Quit
    End If
    End If

    End If
    Case Else
    call Help()
    End Select
    End Function

    call Main()
    '

  3. حفظ الملف باسم Spnhelper.vbs.
  4. في موجه الأوامر، تشغيل الملف Spnhelper.vbs باستخدام خيار سطر الأوامر المناسبة.

    ملاحظة: لعرض خيارات سطر الأوامر للملف Spnhelper.vbs، اكتب Spnhelper.vbs/help في موجه الأوامر، ومن ثم اضغط ENTER.

اعتبارات إضافية

قد تفشل عملية مصادقة Kerberos عندما يتم تعيين أسماء Spn المطلوبة لحسابات الكمبيوتر أو لحسابات المجال. في حالة فشل مصادقة Kerberos بشكل غير متوقع، قم بما يلي:
  • التحقق من وجود لا تكرار أسماء Spn في النشرة المصورة العمومية عن spn.

    على سبيل المثال، إذا تم تعيين SPN HTTP/www.test.com لحساب myDomain\appPool1 وحساب myDomain\appPool2، SPN مكرر موجود على الرغم من أنه يتم تعيين أسماء Spn الخاصة بحسابات مختلفة. بالإضافة إلى ذلك، إذا تم تعيين HTTP/iis6server1.mydomain.com SPN لحساب myDomain\appPool1، و HTTP/iis6server1.mydomain.com SPN يرتبط أيضا بحساب الكمبيوتر للملقم، لديك أيضا SPN مكررة. يمكن أن SPN مضيف واحد وواحد SPN HTTP. ستتجاوز SPN HTTP الصريح الذي الضمني الذي تتم تغطيته بإدخال مضيف. ومع ذلك، إذا كان عنوان URL أن يكتب المستخدم مقترن مع أكثر من حساب مستخدم واحد أو أكثر من حساب الكمبيوتر، لديك SPN مكررة.
  • تحقق من أن أسماء Spn تم نسخها نسخاً متماثلاً إلى وحدات تحكم مجال أخرى.

    منع مشاكل النسخ المتماثل بين وحدات التحكم بالمجال أسماء Spn من النسخ المتماثل لوحدات تحكم مجال أخرى. أسماء Spn لا النسخ المتماثل لوحدات تحكم مجال أخرى، قد لا تعمل التطبيق من بعض أجهزة الكمبيوتر العميلة. على سبيل المثال، إذا تم تعيين SPN HTTP/www.test.com لحساب myDomain\appPool1 على وحدة تحكم مجال، SPN HTTP/www.test.com لا يمكن لحساب myDomain\appPool1 على وحدة تحكم مجال آخر إذا SPN تم نسخ متماثل لها إلى وحدة تحكم المجال الثاني.

    ملاحظة: بشكل افتراضي، يحدث النسخ المتماثل لمدة 15 دقيقة.
  • تحقق من أنه تم تكوين ملقم ويب لدعم مصادقة Kerberos. للقيام بذلك، تحقق من أنه لم يتم تغيير إعداد مفتاح نتاوثينتيكاتيونبروفيديرس في قاعدة تعريف IIS ل NTLM. يكون الإعداد الافتراضي هو التفاوض، NTLM.
  • تحقق من أن ملقم أو الخدمة التي يتم تفويض بيانات الاعتماد الموثوق بها للتفويض.
  • تحقق من أن الحساب الذي يتم تشغيل الخدمة تحت موثوق للتفويض.
  • في "Active Directory"، تحقق من أنه تم مسح خانة الاختيار الحساب حساس ولا يمكن تفويضها للمستخدمين الوصول إلى التطبيق.
  • إذا تم الوصول إلى التطبيق مباشرة من الخادم، تأكد من إلغاء تحديد خانة الاختيار تدقيق الأمان الاسترجاع . لمزيد من المعلومات حول كيفية التحقق من أنه قد تم تعطيل التحقق الاسترجاع، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

    896861 ظهور خطأ 401.1 عند استعراض موقع ويب يستخدم "مصادقة المتكاملة" وتتم استضافته على IIS 5.1 أو IIS 6

  • تحقق من أن العميل عميل تمكين Kerberos. أيضا، تأكد من تمكين الإعداد تمكين مصادقة Windows المتكاملة في Internet Explorer. للقيام بذلك، انقر فوق " خيارات إنترنت " في القائمة " أدوات "، انقر فوق علامة التبويب خيارات متقدمة ، وثم تأكد من تحديد خانة الاختيار تمكين مصادقة Windows المتكاملة .
  • تحقق من أن كافة أجهزة الكمبيوتر التي جزء من عملية Kerberos تحليل الاسم متناسقة وتتصل بثقة Kerberos. على سبيل المثال، تحقق من أن أجهزة الكمبيوتر المتضمنة في عملية Kerberos في نفس الغابة أو تعتبر جزءا من ثقة Kerberos عبر مجموعة تفرعات.
  • تأكد من أن حجم الرمز المميز لا يتجاوز القيمة التي تم تعيينها للخاصية MaxTokenSize . أيضا، تأكد من أن حجم الطلب لا يتجاوز القيمة التي تم تعيينها للخاصية ماكسفيلدلينجث . قد تجاوز هذه القيم إذا أعضاء العديد من مجموعات المستخدمين الذين يعتبرون جزءا من عملية Kerberos.
    رسالة الخطأ 920862 عندما يحاول مستخدم Outlook Web Access الوصول إلى علبة بريد في Exchange Server 2003: "HTTP 400 طلب تالف (رأس الطلب طويل جداً)"

  • تحقق من أنه تم تمكين نهج الأمان المطلوبة عند تكوين حسابات المجال لتجمعات التطبيقات. للقيام بذلك، تحقق من أن حساب المجال عضوا من نهج الأمان المحلية التالية على الكمبيوتر الذي يقوم بتشغيل IIS:
    • ضبط حصص الذاكرة النسبية لعملية
    • تسجيل الدخول كخدمة
    • استبدال رمز مميز على مستوى العملية
  • تأكد من عمل مصادقة Kerberos بشكل صحيح على الحزب الديمقراطي الموحد. بشكل افتراضي، يستخدم مصادقة Kerberos UDP. ومع ذلك، يؤدي إلى ضياع الحزم UDP إلى فشل مصادقة Kerberos. عند حدوث هذه المشكلة، يمكنك فرض مصادقة Kerberos لاستخدام برنامج التعاون الفني. لمزيد من المعلومات حول كيفية فرض مصادقة Kerberos لاستخدام برنامج التعاون الفني، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

    244474 كيفية فرض Kerberos لاستخدام TCP بدلاً من UDP في Windows Server 2003 ونظام التشغيل Windows XP ونظام التشغيل Windows 2000

  • تحقق من أن الطابع الزمني في المصادق لا يختلف بأكثر من خمس دقائق من ملقم الطابع الزمني. لمزيد من المعلومات حول كيفية حل الاختلافات الطابع الزمني، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

    232386 لا يمكن تسجيل الدخول في حالة عدم مزامنة التاريخ والوقت

  • تحقق من أن المنفذ TCP/UDP 88 يتم حظره بواسطة جدار حماية أو جهاز توجيه. بشكل افتراضي، يستخدم مصادقة Kerberos منفذ TCP/UDP 88.
  • تحقق من بيئة وضع مجال بيئة وضع أصلي Microsoft Windows 2000 على الأقل. لمزيد من المعلومات حول كيفية تحديد وضع المجال، قم بزيارة موقع Microsoft التالي على الويب:
  • على العميل، تحقق من أنه تم إضافة عنوان URL الخاص بتطبيق ويب إلى مواقع إنترانت المحلية. لمزيد من المعلومات حول كيفية إضافة عنوان URL لإنترانت محلية، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

    303650 التعرف على موقع إنترانت كموقع إنترنت عند استخدام FQDN أو عنوان IP

  • تأكد من أن كل جهاز شبكة إيثرنت جيجابت يستخدم أحدث إصدار من برنامج التشغيل. للحصول على مزيد من المعلومات حول المشكلات التي تحدث عند برامج التشغيل لشبكة جيجابت إيثرنت الأجهزة القديمة، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

    لا يمكن الاتصال بوحدة تحكم المجال 326152 ولا يمكن تطبيق "نهج المجموعة" باستخدام أجهزة "شبكة جيجابت إيثرنت"

لمزيد من المعلومات حول كيفية استخدام مصادقة Kerberos مع مواقع ويب موازنة التحميل، قم بزيارة موقع Microsoft التالي على الويب:لمزيد من المعلومات حول المشكلات التي تحدث عند استخدام مصادقة Kerberos مع الملقمات الوكيلة، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

321728 Internet Explorer لا يدعم مصادقة Kerberos مع الملقمات الوكيلة

لمزيد من المعلومات حول كيفية تكوين IIS لدعم كل من بروتوكول Kerberos وبروتوكول NTLM لمصادقة الشبكة، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

كيفية تكوين IIS لدعم كل من بروتوكول Kerberos وبروتوكول NTLM لمصادقة الشبكة 215383

لمزيد من المعلومات حول كيفية تكوين ملقم ظاهري Windows SharePoint Services باستخدام مصادقة Kerberos وكيفية التبديل من مصادقة Kerberos إلى مصادقة NTLM، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

كيفية تكوين ملقم ظاهري Windows SharePoint Services استخدام مصادقة Kerberos 832769 وكيفية التبديل من مصادقة Kerberos إلى مصادقة NTLM

لمزيد من المعلومات حول المشكلات التي تحدث عند استخدام بروتوكول مصادقة Kerberos للاتصال بخادم ويب يستخدم منفذ غير قياسي في نظام التشغيل Windows XP أو Windows Server 2003، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

908209 برنامج Internet Explorer 6 لا يمكن استخدام بروتوكول مصادقة Kerberos للاتصال بخادم ويب يستخدم منفذ غير قياسي في نظام التشغيل Windows XP أو Windows Server 2003

خصائص

رقم الموضوع: 929650 - آخر مراجعة: 14‏/01‏/2017 - المراجعة: 1

تعليقات