标签: mmc

"尝试加载证书的私钥时,指定了无效的提供程序类型"CryptographicException

我正在尝试读取第三方服务提供商与我共享的证书的私钥,因此我可以使用它来加密某些XML,然后再将其发送给他们.我在C#中以编程方式这样做,但我认为这是一个权限或配置错误的问题,因此我将重点关注似乎最相关的事实:

  • 我不认为这个问题与代码有关; 我的代码适用于其他计算机,该问题会影响Microsoft的示例代码.
  • 证书是作为PFX文件提供的,仅用于测试目的,因此它还包括虚拟证书颁发机构.
  • 使用MMC.exe,我可以将证书导入本地计算机的个人存储,然后将私钥授予所有相关帐户,并将证书颁发机构拖放到受信任的根证书颁发机构.
  • 使用C#,我可以加载证书(由其指纹识别)并验证它是否具有私钥X509Certificate2.HasPrivateKey.但是,尝试读取密钥会导致错误.在.NET中,CryptographicException在尝试访问该属性时抛出消息"指定了无效的提供程序类型" X509Certificate2.PrivateKey.在Win32中,调用该方法CryptAcquireCertificatePrivateKey返回等效的HRESULT , NTE_BAD_PROV_TYPE.
  • 当使用两个Microsoft自己的代码示例来读取证书的私钥时,也会出现相同的异常.
  • 在当前用户(而不是本地计算机)的等效存储中安装相同的证书,可以成功加载私钥.
  • 我在Windows 8.1上具有本地管理员权限,我尝试在正常模式和高级模式下运行我的代码.Windows 7和Windows 8上的同事已能够从本地计算机商店加载密钥以获得相同的证书.
  • 我可以成功读取自签名IIS测试证书的私钥,该证书位于同一个商店位置.
  • 我已经针对.NET 4.5(这个错误已经报告了一些旧版本的框架).
  • 我不认为这是证书模板的问题,因为我希望同样影响本地机器和当前用户商店?

与我的同事不同,我之前曾多次尝试以各种方式卸载和重新安装证书,包括通过IIS管理器,还包括来自同一发行人的旧证书.我在MMC中看不到任何旧证书或重复证书的痕迹.但是,我确实有许多相同大小的私钥文件,基于最后写入时间,在我的各种安装尝试后必须留下.这些位于以下位置,分别用于本地计算机和当前用户存储:

C:\ ProgramData \微软\加密\ RSA\MachineKeys的

c:\ Users \\ AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21- [其余用户ID]

所以,任何人都可以建议是否:

  • 使用MMC卸载证书是一个好主意,删除所有看起来像孤立私钥的文件,然后重新安装证书并重试?
  • 还有其他文件我应该尝试手动删除吗?
  • 还有什么我应该尝试的吗?

更新 - 添加了一个代码示例,显示尝试读取私钥:

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)

c# windows certificate mmc certificate-store

37
推荐指数
7
解决办法
4万
查看次数

在不同的AppDomain中加载/卸载程序集

我需要在运行时加载的程序集中执行一个方法.现在我想在方法调用后卸载那些已加载的程序集.我知道我需要一个新的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)

c# reflection mmc appdomain

22
推荐指数
1
解决办法
3万
查看次数

如何创建签名证书并在生产中的 IdentityServer4 中使用它?

IdentityServer4 文档站点上的大多数(全部?)示例代码使用AddDeveloperSigningCredential(),但建议AddSigningCredential()在生产中使用。我花了更多的时间来思考如何做到这一点。

如何创建签名证书并在生产中的 IdentityServer4 中使用它?

c# mmc x509 .net-core identityserver4

18
推荐指数
1
解决办法
9936
查看次数

远程sc OpenSCManager查询失败5访问被拒绝

我正在编写一个脚本,定期检查某些服务是否在远程工作站上运行.我有一段时间从一台测试机器到另一台测试机器上运行"SC\workst1查询"命令.两台机器都运行XP专业版SP3.两者都不是域名的一部分.两者都在同一工作组中,管理员帐户具有相同的密码.

我不断从任一工作站到另一个工作站获得"[SC] OpenSCManager FAILED 5:访问被拒绝"消息.我曾尝试在两者上使用提升权限.Windows防火墙软件已关闭.事件安全日志中没有消息显示.当(作为管理员)我尝试去"计算机管理" - >"连接到另一台计算机"并访问远程服务时,我得到"错误5访问被拒绝".

我可以成功地在两台机器之间建立文件系统共享,并且"net use\workst1\IPC $/user:Administrator"成功完成,但SC查询仍然失败.我在这些命令中使用的是IP地址而不是主机名,但这没有用.我不知道还有什么可以尝试的.谢谢您的帮助.

permissions windows-xp cmd mmc service-control-manager

13
推荐指数
4
解决办法
5万
查看次数

如何在Delphi 2009中创建Microsoft管理控制台(MMC)管理单元?

在delphi 2009中是否有一个向导或模板来编写MMC控制台?

编辑:

科林威尔逊组件看起来非常感谢.

delphi mmc delphi-2009

8
推荐指数
1
解决办法
967
查看次数

调试器不附加到进程

我有一个MMC管理单元,我正在尝试调试.目前,放置在管理单元的构造函数中的以下代码在将调试器附加到它上方起作用:

public MySnapIn()
{
#if DEBUG
    if (!Debugger.IsAttached)
    {
        Debugger.Launch();
    }
#endif
    ...
}
Run Code Online (Sandbox Code Playgroud)

但总是要将调试器附加到Visual Studio真的很烦人.我想自动化这个过程.理想情况下,我只需要按F5并自动附加调试器.我尝试过以下方法:

  • 项目属性 - >启动外部程序 - >输入"C:\ Windows\System32\mmc.exe"
  • 项目属性 - >命令行参数 - >给它一个.msc文件的路径(存储管理单元布局,这样每次都可以更容易地加载它,这样你就不必总是文件 - >添加/删除SNAP-IN).

这没用.调试器不会自动附加.如何自动执行此过程,或阻止调试器自动附加?

.net c# debugging mmc visual-studio

7
推荐指数
1
解决办法
1796
查看次数

如何以编程方式更改DCOM配置标识

有没有办法以编程方式获取有关启动DCOM应用程序身份的信息.看附图了解我的意思.

屏幕截图,包含DCOM Config的应用程序属性

我试图使用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 +应用程序

我是COM,DCOM,COM +的新手,确信我错过了一些重要的东西.

过了一会儿,我发现为什么我曾经在第一种方法(ManagementObject)中得到NULL.您将收到:

  • 如果标识当前设置为启动用户,则为NULL
  • "交互式用户"中的"交互式用户"
  • 在第三个选项的情况下使用用户名的一些字符串(参见第一张图片)

但我还是需要一种方法来改变MMC中DCOM Config节点下的Microsoft PowerPoint Slide等项目的身份.

c# wmi dcom com+ mmc

6
推荐指数
1
解决办法
3308
查看次数

为特定组创建组策略

这个问题困扰了我一段时间.我知道这可以通过使用Active Directory和所有其他域的域进行,但是在具有许多用户的基本网络上运行的基本本地计算机上会怎样.

假设这个本地机器是一个公共工作机器,任何有帐户的人都可以使用.所有帐户都是本地帐户,不是漫游或在域上,它们是本机的本地帐户.每个用户具有不同的权限,并按组分隔.

在尝试为某个组创建组策略时,该组实际上并未显示在列表中.列表中显示的所有内容都是本地帐户,以及两个类别/组:管理员非管理员

其他群体在哪里?为什么我不能创建特定于我创建的每个组(Group1,Group2,Group3)的多个策略?

选择文本引用:"与本地组策略兼容的本地用户和组".这似乎说我创建的组似乎与组策略不兼容?

是否有任何修复方法可以使自定义组与组策略"兼容"?注册表或DLL修复可能?

组策略MMC编辑器

windows permissions networking mmc group-policy

6
推荐指数
1
解决办法
823
查看次数

MMC 无法创建管理单元 SQL Server 配置管理器

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

直到昨晚它都运行良好。可能是什么原因,我该如何解决。但在后台 sql server 工作正常。

sql windows sql-server mmc snap-in

5
推荐指数
1
解决办法
2万
查看次数

用户帐户无权访问客户端证书的私钥

我有一个场景,我在代码中使用证书来触发操作。将证书导入到本地计算机并运行 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)

c# mmc ssl-certificate x509certificate

5
推荐指数
2
解决办法
2702
查看次数