Saya telah melalui proses mencoba untuk menambahkan https mengikat ke situs dan itu bisa sangat menyakitkan. Ada banyak cara untuk mencapai setiap langkah dan masing-masing memiliki jebakan. Saya meninggalkan solusi terakhir dengan harapan seseorang akan merasakan manfaatnya.
Solusi ini mengasumsikan bahwa Anda telah menginstal IIS dan situs web yang ditentukan. Hubungi situs sample.contoso.com untuk keperluan posting ini. Asumsikan Anda memiliki sertifikat dalam file sample.contoso.com.pfx yang juga ingin Anda gunakan.
Langkah pertama adalah mengimpor sertifikat dari file.
$certPwd = ConvertTo-SecureString -String "password" -Force -AsPlainText
$webServerCert = Import-PfxCertificate -FilePath c:\some\folder\sample.contoso.com.pfx -CertStoreLocation Cert:\LocalMachine\My -Password $certPwd
Akan lebih baik jika itu sudah cukup. Dan dalam beberapa kasus mungkin. Namun, bagi saya, ini meninggalkan sertifikat tanpa akses yang tepat ke kunci pribadi. Ini menyebabkan kesalahan powershell "Sesi masuk yang ditentukan tidak ada. Mungkin sudah dihentikan" ketika saya pergi untuk menambahkan sertifikat ke penjilidan (lihat langkah itu nanti). Jadi, langkah selanjutnya adalah memperbaiki ACL untuk kunci privat.
$privateKeyFilename = $webServerCert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
$privateKeyFullPath = "c:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\"+$privateKeyFilename
$aclRule = "SYSTEM", "Full", "Allow"
$aclEntry = New-Object System.Security.AccessControl.FileSystemAccessRule $aclRule
$privateKeyAcl = (Get-Item $privateKeyFullPath).GetAccessControl("Access")
$privateKeyAcl.AddAccessRule($aclEntry)
Set-Acl $privateKeyFullPath $privateKeyAcl
Ini akan memungkinkan sistem lokal untuk memiliki akses penuh ke kunci pribadi jika itu tidak diwarisi dari folder yang berisi.
Jika Anda ingin mendapatkan sertifikat yang sudah diinstal, Anda memerlukan hash untuk itu dan dapat mengambilnya dengan Get-Item seperti:
$webServerCert = get-item Cert:\LocalMachine\My\XFX2DX02779XFD1F6F4X8435A5X26ED2X8DEFX95
Langkah selanjutnya adalah membuat ikatan.
New-WebBinding -Name sample.contoso.com -IPAddress * -Port 443 -Protocol "https"
Penting untuk dicatat bahwa "https" adalah case-sensitive. Jika Anda menggunakan "HTTPS" sebagai gantinya, Anda mendapatkan hasil pengikatan yang sangat berbeda.
Ikatan ini belum memiliki sertifikat, jadi langkah terakhir adalah melampirkan sertifikat. Jika sertifikat dipercaya dengan benar dan keamanannya benar, langkah ini harus berhasil. Itu bisa menjadi rewel jika ada masalah dengan sertifikat sekalipun.
$bind = Get-WebBinding -Name $webSiteDNSName -Protocol https
$bind.AddSslCertificate($webServerCert.GetCertHashString(), "my")
Jika ini gagal dengan pesan tentang sesi masuk tidak ada, maka sertifikat mungkin memiliki beberapa masalah. Tinjau penampil acara untuk detail lebih lanjut. Selama upaya saya, saya menemukan peristiwa 5061 di log keamanan. Ketika gagal, itu menunjukkan bahwa OpenKey gagal dengan 80090016 (The Keyset Tidak Ada). Dan kegagalannya adalah karena SISTEM tidak memiliki akses ke kunci pribadi.
Itu cukup bagi saya untuk membuat ikatan https. Ikatan http adalah produk sampingan dari menggunakan cmdlet New-WebSite. Jika tidak datang secara gratis, saya tidak menemukan membuat port 80 yang mengikat dengan cmdlet New-WebBinding menjadi tantangan.