Lưu ý Thông tin trên Trang này áp dụng cho AD FS 2012 R2 sau.

Nếu Proxy ứng dụng Web (WAP) được triển khai, mối quan hệ tin cậy proxy phải được thiết lập giữa máy chủ WAP và máy chủ AD FS. Kiểm tra nếu mối quan hệ tin cậy proxy được thiết lập hoặc khởi động không thành công tại một số điểm trong thời gian.

Thông tin cơ bản

Mối quan hệ tin cậy proxy là chứng chỉ máy khách dựa trên. Khi bạn chạy thuật sĩ sau khi cài đặt Proxy ứng dụng Web, thuật sĩ tạo chứng chỉ tự ký khách hàng sử dụng uỷ nhiệm mà bạn đã chỉ định trong thuật sĩ. Sau đó, thuật sĩ chèn chứng chỉ vào cơ sở dữ liệu cấu hình AD FS và thêm AdfsTrustedDevices kho chứng chỉ trên máy chủ AD FS.

Đối với bất kỳ kết nối SSL, http.sys sử dụng thứ tự ưu tiên sau để liên kết chứng chỉ SSL để phù hợp với chứng chỉ:

Ưu tiên

Tên

Tham số

Mô tả

1

IP

IP:port

Kết hợp chính xác IP và cổng

2

SNI

Hostname:port

Tên máy chủ chính xác phù hợp (kết nối phải chỉ định SNI)

3

CCS

Cổng

Gọi Trung tâm kho chứng chỉ

4

Đại diện IPv6

Cổng

Phù hợp với đại diện IPv6 (kết nối phải IPv6)

5

IP mở rộng

Cổng

IP mở rộng phù hợp (kết nối có thể IPv4 hoặc IPv6)

AD FS 2012 R2 và sau đó độc lập dịch vụ thông tin Internet (IIS) và hoạt động như một dịch vụ trên http.sys. liên kết chứng chỉ SSL hostname:port sử dụng AD FS. Trong quá trình xác thực chứng chỉ máy khách, AD FS gửi chứng chỉ tin cậy danh (CTL) dựa trên chứng chỉ trong kho lưu trữ AdfsTrustedDevices. Nếu sử dụng một chứng chỉ SSL liên kết cho máy chủ AD FS IP:port hoặc lưu trữ CTL không AdfsTrustedDevices mối quan hệ tin cậy proxy có thể không được thiết lập.

Nhận liên kết chứng chỉ SSL cho AD FS

Máy chủ AD FS, chạy lệnh sau trong Windows PowerShell:
netsh http show sslcert

Trong danh sách các liên kết trở lại, hãy tìm những với ID ứng dụng của 5d89a20c-beab-4389-9447 người-324788eb944a. Đây là ví dụ về một liên kết ổn định. Lưu ý phần in đậm.

Hostname:port : adfs.contoso.com:443
Certificate Hash : 3638de9b03a488341dfe32fc3ae5c480ee687793
Application ID : {5d89a20c-beab-4389-9447-324788eb944a}
Certificate Store Name : MY
Verify Client Certificate Revocation : Enabled
Verify Revocation Using Cached Client Certificate Only : Disabled
Usage Check : Enabled
Revocation Freshness Time : 0
URL Retrieval Timeout : 0
Ctl Identifier : (null)
Ctl Store Name : AdfsTrustedDevices
DS Mapper Usage : Disabled
Negotiate Client Certificate : Disabled

Khắc phục sự cố

Để tự động phát hiện các vấn đề với các mối quan hệ tin cậy proxy, chạy lệnh sau. Dựa trên sự cố phát hiện, thực hiện hành động phù hợp ở cuối trang.

param

(

  [switch]$syncproxytrustcerts

)

function checkhttpsyscertbindings()

{

Write-Host; Write-Host("1 – Checking http.sys certificate bindings for potential issues")

$httpsslcertoutput = netsh http show sslcert

$adfsservicefqdn = (Get-AdfsProperties).HostName

$i = 1

$certbindingissuedetected = $false

While($i -lt $httpsslcertoutput.count)

{

        $ipport = $false

        $hostnameport = $false

        if ( ( $httpsslcertoutput[$i] -match "IP:port" ) ) { $ipport = $true }

        elseif ( ( $httpsslcertoutput[$i] -match "Hostname:port" ) ) { $hostnameport = $true }

        # Check for IP specific certificate bindings

        if ( ( $ipport -eq $true ) )

        {

            $httpsslcertoutput[$i]

            $ipbindingparsed = $httpsslcertoutput[$i].split(":")

            if ( ( $ipbindingparsed[2].trim() -ne "0.0.0.0" ) -and ( $ipbindingparsed[3].trim() -eq "443") )

            {

                $warning = "There is an IP specific binding on IP " + $ipbindingparsed[2].trim() + " which may conflict with the AD FS port 443 cert binding." | Write-Warning

                $certbindingissuedetected = $true

            }

            $i = $i + 14

            continue

        }

        # check that CTL Store is set for ADFS service binding

        elseif ( $hostnameport -eq $true )

        {

            $httpsslcertoutput[$i]

            $ipbindingparsed = $httpsslcertoutput[$i].split(":")

            If ( ( $ipbindingparsed[2].trim() -eq $adfsservicefqdn ) -and ( $ipbindingparsed[3].trim() -eq "443") -and ( $httpsslcertoutput[$i+10].split(":")[1].trim() -ne "AdfsTrustedDevices" ) )

            {

                Write-Warning "ADFS Service binding does not have CTL Store Name set to AdfsTrustedDevices"

                $certbindingissuedetected = $true

            }

        $i = $i + 14

        continue

        }

    $i++

}

If ( $certbindingissuedetected -eq $false ) { Write-Host "Check Passed: No certificate binding issues detected" }

}

function checkadfstrusteddevicesstore()

{

# check for CA issued (non-self signed) certs in the AdfsTrustedDevices cert store

Write-Host; Write-Host "2 – Checking AdfsTrustedDevices cert store for non-self signed certificates"

$certlist = Get-Childitem cert:\LocalMachine\AdfsTrustedDevices -recurse | Where-Object {$_.Issuer -ne $_.Subject}

If ( $certlist.count -gt 0 )

{

    Write-Warning "The following non-self signed certificates are present in the AdfsTrustedDevices store and should be removed"

    $certlist | Format-List Subject

}

Else { Write-Host "Check Passed: No non-self signed certs present in AdfsTrustedDevices cert store" }

}

function checkproxytrustcerts

{

    Param ([bool]$repair=$false)

    Write-Host; Write-Host("3 – Checking AdfsTrustedDevices cert store is in sync with ADFS Proxy Trust config")

    $doc = new-object Xml

    $doc.Load("$env:windir\ADFS\Microsoft.IdentityServer.Servicehost.exe.config")

    $connString = $doc.configuration.'microsoft.identityServer.service'.policystore.connectionString

    $command = "Select ServiceSettingsData from [IdentityServerPolicy].[ServiceSettings]"

    $cli = new-object System.Data.SqlClient.SqlConnection

    $cli.ConnectionString = $connString

    $cmd = new-object System.Data.SqlClient.SqlCommand

    $cmd.CommandText = $command

    $cmd.Connection = $cli

    $cli.Open()

    $configString = $cmd.ExecuteScalar()

    $configXml = new-object XML

    $configXml.LoadXml($configString)

    $rawCerts = $configXml.ServiceSettingsData.SecurityTokenService.ProxyTrustConfiguration._subjectNameIndex.KeyValueOfstringArrayOfX509Certificate29zVOn6VQ.Value.X509Certificate2

    #$ctl = dir cert:\LocalMachine\ADFSTrustedDevices

    $store = new-object System.Security.Cryptography.X509Certificates.X509Store("ADFSTrustedDevices","LocalMachine")

    $store.open("MaxAllowed")

    $atLeastOneMismatch = $false

    $badCerts = @()

    foreach($rawCert in $rawCerts)

    {   

        $rawCertBytes = [System.Convert]::FromBase64String($rawCert.RawData.'#text')

        $cert=New-Object System.Security.Cryptography.X509Certificates.X509Certificate2(,$rawCertBytes)

        $now = Get-Date

        if ( ($cert.NotBefore -lt $now) -and ($cert.NotAfter -gt $now))

        {

            $certThumbprint = $cert.Thumbprint

         $certSubject = $cert.Subject

         $ctlMatch = dir cert:\localmachine\ADFSTrustedDevices\$certThumbprint -ErrorAction SilentlyContinue

         if ($ctlMatch -eq $null)

         {

       $atLeastOneMismatch = $true

          Write-Warning "This cert is NOT in the CTL: $certThumbprint – $certSubject"

       if ($repair -eq $true)

       {

        write-Warning "Attempting to repair"

        $store.Add($cert)

        Write-Warning "Repair successful"

       }

                else

                {

                    Write-Warning ("Please install KB.2964735 or re-run script with -syncproxytrustcerts switch to add missing Proxy Trust certs to AdfsTrustedDevices cert store")

                }

         }

        }

    }

    $store.Close()

    if ($atLeastOneMismatch -eq $false)

    {

     Write-Host("Check Passed: No mismatched certs found. CTL is in sync with DB content")

    }

}

checkhttpsyscertbindings

checkadfstrusteddevicesstore

checkproxytrustcerts($syncproxytrustcerts)

Write-Host; Write-Host("All checks completed.")

Sự cố phát hiện là gì?

Bạn cần thêm trợ giúp?

Phát triển các kỹ năng của bạn
Khám phá nội dung đào tạo
Sở hữu tính năng mới đầu tiên
Tham gia Microsoft dùng nội bộ

Thông tin này có hữu ích không?

Bạn hài lòng đến đâu với chất lượng dịch thuật?
Điều gì ảnh hưởng đến trải nghiệm của bạn?

Cảm ơn phản hồi của bạn!

×