Saya memiliki aplikasi ASP.NET yang mengakses kunci privat dalam sertifikat di penyimpanan sertifikat. Pada Windows Server 2003 saya dapat menggunakan winhttpcertcfg.exe untuk memberikan akses kunci pribadi ke akun LAYANAN JARINGAN. Bagaimana cara memberikan izin untuk mengakses Kunci Pribadi dalam sertifikat di penyimpanan sertifikat (Komputer Lokal \ Pribadi) di Windows Server 2008 R2 di situs web IIS 7.5?
Saya telah mencoba memberikan akses Kepercayaan Penuh ke "Semua Orang", "IIS AppPool \ DefaultAppPool", "IIS_IUSRS", dan semua akun keamanan lain yang dapat saya temukan menggunakan Sertifikat MMC (Server 2008 R2). Namun kode di bawah ini menunjukkan bahwa kode tersebut tidak memiliki akses ke Kunci Pribadi dari sertifikat yang diimpor dengan kunci privat. Kode tersebut malah melempar dan melakukan kesalahan setiap kali properti kunci pribadi diakses.
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater ID="repeater1" runat="server">
<HeaderTemplate>
<table>
<tr>
<td>
Cert
</td>
<td>
Public Key
</td>
<td>
Private Key
</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<%#((X509Certificate2)Container.DataItem).GetNameInfo(X509NameType.SimpleName, false) %>
</td>
<td>
<%#((X509Certificate2)Container.DataItem).HasPublicKeyAccess() %>
</td>
<td>
<%#((X509Certificate2)Container.DataItem).HasPrivateKeyAccess() %>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table></FooterTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>
Default.aspx.cs
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Web.UI;
public partial class _Default : Page
{
public X509Certificate2Collection Certificates;
protected void Page_Load(object sender, EventArgs e)
{
// Local Computer\Personal
var store = new X509Store(StoreLocation.LocalMachine);
// create and open store for read-only access
store.Open(OpenFlags.ReadOnly);
Certificates = store.Certificates;
repeater1.DataSource = Certificates;
repeater1.DataBind();
}
}
public static class Extensions
{
public static string HasPublicKeyAccess(this X509Certificate2 cert)
{
try
{
AsymmetricAlgorithm algorithm = cert.PublicKey.Key;
}
catch (Exception ex)
{
return "No";
}
return "Yes";
}
public static string HasPrivateKeyAccess(this X509Certificate2 cert)
{
try
{
string algorithm = cert.PrivateKey.KeyExchangeAlgorithm;
}
catch (Exception ex)
{
return "No";
}
return "Yes";
}
}
sumber
IIS_IUSRS
akses ke kunci privat sertifikatCatatan tentang pemberian izin melalui MMC, Certs, Pilih Cert, klik kanan, semua-tugas, "Kelola Kunci Pribadi"
Kelola Kunci Pribadi hanya ada di daftar menu untuk Pribadi ... Jadi jika Anda telah memasukkan sertifikat Anda ke Orang Terpercaya, dll. Anda kurang beruntung.
Kami menemukan jalan keluar yang berhasil bagi kami. Seret dan lepas sertifikat ke Pribadi, lakukan hal Kelola Kunci Pribadi untuk memberikan izin. Ingatlah untuk mengatur untuk menggunakan built-in tipe objek dan menggunakan mesin lokal bukan domain. Kami memberikan hak kepada pengguna DefaultAppPool dan berhenti di situ.
Setelah Anda selesai, seret dan lepas sertifikat kembali ke tempat asal Anda memilikinya. Presto.
sumber
winhttpcertcfg
Jika Anda mencoba memuat sertifikat dari file .pfx di IIS, solusinya mungkin sesederhana mengaktifkan opsi ini untuk
Application Pool
.Klik kanan pada App Pool dan pilih
Advanced Settings
.Kemudian aktifkan
Load User Profile
sumber
Saya menemukan cara melakukan ini di Powershell yang ditanyakan seseorang:
sumber
Bagi saya, itu tidak lebih dari mengimpor ulang sertifikat dengan centang "Izinkan kunci pribadi untuk diekspor".
Saya kira itu perlu, tetapi itu membuat saya gugup karena ini adalah aplikasi pihak ketiga yang mengakses sertifikat ini.
sumber
Melengkapi jawaban ini adalah panduan untuk menemukan kunci privat dari sertifikat dan menambahkan izin.
Ini adalah panduan untuk mendapatkan FindPrivateKey.exe yang ditemukan di panduan untuk menemukan kunci privat sertifikat.
sumber
Meskipun saya telah menghadiri yang di atas, saya telah sampai pada titik ini setelah banyak upaya. 1- Jika Anda ingin mengakses sertifikat dari toko, Anda dapat melakukan ini sebagai contoh 2- Jauh lebih mudah dan lebih bersih untuk membuat sertifikat dan menggunakannya melalui jalur
Asp.net Core 2.2 OR1:
ATAU 2:
sumber
Di Panel Sertifikat, klik kanan beberapa sertifikat -> Semua tugas -> Kelola kunci pribadi -> Tambahkan Pengguna IIS_IUSRS dengan kontrol penuh
Dalam kasus saya, saya tidak perlu menginstal sertifikat saya dengan opsi "Izinkan kunci pribadi untuk diekspor", seperti yang dikatakan di jawaban lain.
sumber