web-dev-qa-db-ja.com

Windows Server 2016でルート証明書が見つからない(新規インストール)

同社ではルート証明書に本当に煩わされることはなく、これはWindows Updates(およびそのためのWSUSがあります)と共に管理されるものであり、すべてが順調であるという印象を受けました。

しかし、今日、すべての更新を含む新しいWindows Server 2016インストールには、非常に基本的なルート証明書しかなく、Googleを開くことができない(証明書を信頼していないため)ようです。 )。

(Windows 10の新規インストールをまだ確認していません...)

これは以前には起こらなかったので、私はこれに少し混乱しています。 GPOにいくつかの不適切な変更を加えた(この影響があるとは思えない)か、これは最近変更されたものですか? Googleなどに問題なくアクセスできるようにするにはどうすればよいですか?信頼できる証明書をGPO経由で手動で追加する必要がありますか?


以下は、サーバーの新規インストールでの状況のスクリーンショットです。

SSL certificate error

General

Path

Cert list

2
Shaamaan

それは問題なく、予想される動作です。デフォルトでは、信頼されたルートストアに表示される必要な証明書はごくわずかです。残り(約300のルートがあります)は、初めて直面したときにオンデマンドでインストールされます。 Crypt32.dllおよびWindows Updateには、ルート証明書の隠しコピーがあります。心配することは何もありません。

更新:

内部チェックを行ったところ、リクエストされたルートがcrypt32.dllファイルに埋め込まれていることがわかりました。これは、このdllから埋め込み証明書を抽出し、予期されるルートを見つけることができるPowerShellコードです。

$signature = @"
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr LoadLibraryEx(
    String lpFileName,
    IntPtr hFile,
    UInt32 dwFlags
);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr FindResource(
    IntPtr hModule,
    int lpID,
    string lpType
);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern uint SizeofResource(
    IntPtr hModule,
    IntPtr hResInfo
);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr LoadResource(
    IntPtr hModule,
    IntPtr hResInfo
);
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool FreeLibrary(
    IntPtr hModule
);
"@
Add-Type -MemberDefinition $signature -Namespace PKI -Name Kernel32
$path = $Env:SystemRoot + "\System32\crypt32.dll"
$hModule = [PKI.Kernel32]::LoadLibraryEx($path,[IntPtr]::Zero,0x2)
$hResInfo = [PKI.Kernel32]::FindResource($hModule,1010,"AUTHROOTS")
$size = [PKI.Kernel32]::SizeOfResource($hModule, $hResInfo)
$resource = [PKI.Kernel32]::LoadResource($hModule, $hResInfo)
$bytes = New-Object byte[] -ArgumentList $size
[Runtime.InteropServices.Marshal]::Copy($resource, $bytes, 0, $size)
$AUTHROOTS = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection
$AUTHROOTS.Import($bytes)
[void][PKI.Kernel32]::FreeLibrary($hModule)
$AUTHROOTS | ?{$_.thumbprint -eq "75E0ABB6138512271C04F85FDDDE38E4B7242EFE"}

このコードをPSコンソールにコピーして貼り付け、オブジェクトが返されるかどうかを確認します/

4
Crypt32

信頼されたルートCAは、システムがインターネットにアクセスでき、機能が無効になっていない場合、自動的に更新されます。 certutilを使用して、信頼されたルート証明書をダウンロードし、それらを共有で公開し、システムに証明書を取得する場所を指示するグループポリシーを作成することもできます。

https://docs.Microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/dn265983(v%3Dws.11) =

http://woshub.com/updating-trusted-root-certificates-in-windows-10/

Key: HKLM\Software\Policies\Microsoft\SystemCertificates\AuthRoot

Value: DisableRootAutoUpdate
3
Greg Askew