我正在尝试读取第三方服务提供商与我共享的证书的私钥,因此我可以使用它来加密某些XML,然后再将其发送给他们.我在C#中以编程方式这样做,但我认为这是一个权限或配置错误的问题,因此我将重点关注似乎最相关的事实:
X509Certificate2.HasPrivateKey.但是,尝试读取密钥会导致错误.在.NET中,CryptographicException在尝试访问该属性时抛出消息"指定了无效的提供程序类型" X509Certificate2.PrivateKey.在Win32中,调用该方法CryptAcquireCertificatePrivateKey返回等效的HRESULT , NTE_BAD_PROV_TYPE.与我的同事不同,我之前曾多次尝试以各种方式卸载和重新安装证书,包括通过IIS管理器,还包括来自同一发行人的旧证书.我在MMC中看不到任何旧证书或重复证书的痕迹.但是,我确实有许多相同大小的私钥文件,基于最后写入时间,在我的各种安装尝试后必须留下.这些位于以下位置,分别用于本地计算机和当前用户存储:
C:\ ProgramData \微软\加密\ RSA\MachineKeys的
c:\ Users \\ AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21- [其余用户ID]
所以,任何人都可以建议是否:
更新 - 添加了一个代码示例,显示尝试读取私钥:
static void Main()
{
// Exception occurs when trying to read the private key after loading certificate from here:
X509Store store = new X509Store("MY", StoreLocation.LocalMachine);
// Exception does not occur if certificate was installed to, and …Run Code Online (Sandbox Code Playgroud) 我需要在运行时加载的程序集中执行一个方法.现在我想在方法调用后卸载那些已加载的程序集.我知道我需要一个新的AppDomain,所以我可以卸载库.但在这里,出现了问题.
要加载的程序集是我的插件框架中的插件.他们根本没有切入点.我所知道的是它们包含一些实现给定接口的类型.旧的非AppDomain代码看起来像这样(稍微缩短):
try
{
string path = Path.GetFullPath("C:\library.dll");
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
Assembly asm = Assembly.LoadFrom(path);
Type[] types = asm.GetExportedTypes();
foreach (Type t in types)
{
if ((t.GetInterface("IStarter") != null) && !t.IsAbstract)
{
object tempObj = Activator.CreateInstance(t);
MethodInfo info = t.GetMethod("GetParameters");
if (info != null)
{
return info.Invoke(tempObj, null) as string;
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(String.Format("Damn '{0}'.", ex.Message), "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
if (args.Name.StartsWith("MyProject.View,"))
{
string path = Path.GetFullPath("C:\view.dll"));
return …Run Code Online (Sandbox Code Playgroud) IdentityServer4 文档站点上的大多数(全部?)示例代码使用AddDeveloperSigningCredential(),但建议AddSigningCredential()在生产中使用。我花了更多的时间来思考如何做到这一点。
如何创建签名证书并在生产中的 IdentityServer4 中使用它?
我正在编写一个脚本,定期检查某些服务是否在远程工作站上运行.我有一段时间从一台测试机器到另一台测试机器上运行"SC\workst1查询"命令.两台机器都运行XP专业版SP3.两者都不是域名的一部分.两者都在同一工作组中,管理员帐户具有相同的密码.
我不断从任一工作站到另一个工作站获得"[SC] OpenSCManager FAILED 5:访问被拒绝"消息.我曾尝试在两者上使用提升权限.Windows防火墙软件已关闭.事件安全日志中没有消息显示.当(作为管理员)我尝试去"计算机管理" - >"连接到另一台计算机"并访问远程服务时,我得到"错误5访问被拒绝".
我可以成功地在两台机器之间建立文件系统共享,并且"net use\workst1\IPC $/user:Administrator"成功完成,但SC查询仍然失败.我在这些命令中使用的是IP地址而不是主机名,但这没有用.我不知道还有什么可以尝试的.谢谢您的帮助.
在delphi 2009中是否有一个向导或模板来编写MMC控制台?
编辑:
科林威尔逊组件看起来非常感谢.
我有一个MMC管理单元,我正在尝试调试.目前,放置在管理单元的构造函数中的以下代码在将调试器附加到它上方起作用:
public MySnapIn()
{
#if DEBUG
if (!Debugger.IsAttached)
{
Debugger.Launch();
}
#endif
...
}
Run Code Online (Sandbox Code Playgroud)
但总是要将调试器附加到Visual Studio真的很烦人.我想自动化这个过程.理想情况下,我只需要按F5并自动附加调试器.我尝试过以下方法:
这没用.调试器不会自动附加.如何自动执行此过程,或阻止调试器自动附加?
有没有办法以编程方式获取有关启动DCOM应用程序身份的信息.看附图了解我的意思.

我试图使用WMI
ManagementObjectSearcher s = new ManagementObjectSearcher(new ManagementScope(@"\\.\root\cimv2"), new ObjectQuery(
"select * from Win32_DCOMApplicationSetting where AppID='{048EB43E-2059-422F-95E0-557DA96038AF}'"))
ManagementObjectCollection dcomSett = s.Get();
var value = dcomSett.Cast<ManagementObject>().ToArray()
[0].Properties["RunAsUser"].Value;
Run Code Online (Sandbox Code Playgroud)
但"RunAsUser"属性为空.也试过Interop.COMAdmin
COMAdmin.COMAdminCatalogClass catalog = (COMAdmin.COMAdminCatalogClass)new COMAdmin.COMAdminCatalog();
(COMAdmin.COMAdminCatalogCollection)catalog.GetCollection("Applications")
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我设法获得MMC的"组件服务"管理单元中"COM +应用程序"节点下列出的应用程序:

我是COM,DCOM,COM +的新手,确信我错过了一些重要的东西.
过了一会儿,我发现为什么我曾经在第一种方法(ManagementObject)中得到NULL.您将收到:
但我还是需要一种方法来改变MMC中DCOM Config节点下的Microsoft PowerPoint Slide等项目的身份.
这个问题困扰了我一段时间.我知道这可以通过使用Active Directory和所有其他域的域进行,但是在具有许多用户的基本网络上运行的基本本地计算机上会怎样.
假设这个本地机器是一个公共工作机器,任何有帐户的人都可以使用.所有帐户都是本地帐户,不是漫游或在域上,它们是本机的本地帐户.每个用户具有不同的权限,并按组分隔.
在尝试为某个组创建组策略时,该组实际上并未显示在列表中.列表中显示的所有内容都是本地帐户,以及两个类别/组:管理员和非管理员
其他群体在哪里?为什么我不能创建特定于我创建的每个组(Group1,Group2,Group3)的多个策略?
选择文本引用:"与本地组策略兼容的本地用户和组".这似乎说我创建的组似乎与组策略不兼容?
是否有任何修复方法可以使自定义组与组策略"兼容"?注册表或DLL修复可能?

当我尝试在 sql server 2008 中连接到 sql server 配置管理器时。它显示错误 MMC 无法创建管理单元。

直到昨晚它都运行良好。可能是什么原因,我该如何解决。但在后台 sql server 工作正常。
我有一个场景,我在代码中使用证书来触发操作。将证书导入到本地计算机并运行 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) mmc ×10
c# ×6
windows ×3
permissions ×2
.net ×1
.net-core ×1
appdomain ×1
certificate ×1
cmd ×1
com+ ×1
dcom ×1
debugging ×1
delphi ×1
delphi-2009 ×1
group-policy ×1
networking ×1
reflection ×1
snap-in ×1
sql ×1
sql-server ×1
windows-xp ×1
wmi ×1
x509 ×1