我们最近升级到IIS7作为核心Web服务器,我需要在权限方面进行概述.以前,当需要写入文件系统时,我会给AppPool用户(网络服务)访问目录或文件.
在IIS7中,我看到,默认情况下,AppPool用户设置为ApplicationPoolIdentity.因此,当我检查任务管理器时,我看到一个名为"WebSite.com"的用户帐户正在运行IIS进程('Website.com'是IIS中网站的名称)
但是,如果我尝试使用该帐户授予权限,则此用户帐户不存在.那么,我如何确定哪个用户也可以授予权限呢?
编辑================================================= =============================
有关屏幕截图中的问题,请参阅下文.我们的网站(www.silverchip.co.uk)使用用户名SilverChip.co.uk运行.但是当我添加提交时,这个用户确实存在!

=================================请参阅AppPool图像

我四处搜索,找不到很多信息,基本上我有Windows 2008 R2,我创建了PowerShell脚本,将PFX文件加载到Local Machine的证书存储区.
现在,我需要授予应用程序池的权限,以便使用PowerShell读取证书的私钥.
在Windows 2003的旧方式中,我只需要将实际文件放在C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\文件夹中,但看起来Win 2008使用的是另一个文件夹.
有人有解决方案吗?
- 更新我的代码版本 -
function Grant-CertificatePermissions([string]$certSubject,[string]$user,[string]$permissionType,[string]$permission = $args[3])
{
$getCert = Get-LocalMachineCertificate $certSubject
$keypath = Get-CertificateStorePath
$certHash = $getCert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
$certFullPath = $keypath+$certHash
$certAcl = Get-Acl -Path $certFullPath
try
{
$accessRule=new-object System.Security.AccessControl.FileSystemAccessRule $user, $permissionType, $permission
$certAcl.AddAccessRule($accessRule)
}
catch [System.Exception]
{
throw "Invalid User Id Or Permission"
}
Set-Acl $certFullPath $certAcl
}
function Get-LocalMachineCertificate([string]$subject, [string]$certificateStoreLocation, [string]$certificateStoreName)
{
$getCert = Get-ChildItem -Recurse Cert:\$certificateStoreLocation\$certificateStoreName | Where-Object {$_.Subject -eq $subject}
if(!$getCert)
{
throw "Certificate Not …Run Code Online (Sandbox Code Playgroud) 我正在使用 appsettings.json 在 .netcore3.1 应用程序中配置 Kestrel。这是 appsettings.json 中的相关部分
"Kestrel": {
"Certificates": {
"Default": {
"Subject": "certificate name",
"Store": "MY",
"Location": "LocalMachine",
"AllowInvalid": true
}
}
},
"AllowedHosts": "*",
"Urls": "http://*:5010;https://*:5011"
Run Code Online (Sandbox Code Playgroud)
如果我启动应用程序,它会出现在两个端口上。但是,通过 HTTPS 访问它会将此异常转储到我的应用程序的控制台
Microsoft.AspNetCore.Server.Kestrel[0] 处理 0HLT41KHBJ13T 时未处理的异常。System.ComponentModel.Win32Exception (0x8009030D): System.Net.SSPIWrapper.AcquireCredentialsHandle(SSPIInterface secModule, String package, CredentialUse intent, SCHANNEL_CRED scc) 无法识别提供给包的凭据
但是,如果我以管理权限启动应用程序,它就可以工作。因此,证书很好(它具有所需的私钥),但仍然无法正常工作。只是为了好玩,我将证书导入到 LocalUser 存储中,即使没有管理员权限,应用程序也绝对可以访问该存储,但没有任何乐趣。
如果没有以管理权限运行,有什么想法会导致此失败?您可以看到证书位于证书存储中,而不是文件系统中,这排除了文件权限问题。
我有一个场景,我在代码中使用证书来触发操作。将证书导入到本地计算机并运行 C# 代码后,它会引发私钥访问问题,并显示错误“用户帐户无法访问客户端证书的私钥”。任何可以解决问题或可以让我调试问题的指针?
我做了什么:运行 - certlm.msc 个人 - 证书 - 所有任务 - 导入 - 本地计算机 - 浏览我的 .cer 文件
我试图解决(但无法解决):运行 - certlm.msc 个人 - 证书 - 我的证书 - 右键单击 - 所有任务 - 管理私钥 - 添加具有完全控制权的“网络服务”。我尝试添加我的邮件 ID 或用户名,但不允许添加。
错误:System.InvalidOperationException:“用户帐户无权访问客户端证书的私钥”
配置:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="ClientBehavior">
<clientCredentials>
<clientCertificate findValue="xxxx-correct thumbprint-xxxxxxx" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" />
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud) 我正在尝试从powershell脚本中找到一种授予私钥权限的方法.证书存储在CNG中.欢迎所有想法.
powershell ×2
asp.net-core ×1
c# ×1
certificate ×1
cng ×1
https ×1
iis-7 ×1
iis-7.5 ×1
mmc ×1
permissions ×1