【问题标题】:Where to begin creating a Powershell script for this?从哪里开始为此创建 Powershell 脚本?
【发布时间】:2011-12-04 15:50:50
【问题描述】:

如果我需要为证书提供如下所述的额外权限,我什至应该从 Powershell 的哪里开始?必须有一个 Windows 命令行可执行文件,我必须从命令行开始。只有这样我才能考虑用 powershell 脚本编写它,对吗?

  1. 单击“开始”,在“搜索程序和文件”框中键入 mmc,然后按 Enter。
  2. 在“文件”菜单上,单击“添加/删除管理单元”。
  3. 在可用的管理单元下,双击证书。
  4. 选择计算机帐户,然后单击下一步。
  5. 单击本地计算机,然后单击完成。单击确定。
  6. 在控制台根目录下的证书(本地计算机)的个人存储中,单击证书。
  7. 右键单击之前创建的 xxAzurehost1 证书。选择所有任务 > 管理私钥。单击添加,然后单击高级。 单击位置并选择您的本地计算机。单击立即查找。选择 NETWORK SERVICE 在搜索结果中,然后单击 OK。单击确定。在里面 xxxazurehost1 私钥窗口的权限,选择 NETWORK SERVICE 并授予读取权限。点击确定。

【问题讨论】:

    标签: powershell x509certificate


    【解决方案1】:

    要控制私钥的 ACL,您只需编辑文件 ACL。诀窍是找到哪个文件。

    私钥存放在:

    %ProgramData%\Microsoft\Crypto
    

    在 XP 上:

    C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto
    

    在这里,您将看到按算法组织的键,例如DSS、RSA。

    用户存储将是具有用户 SID 的子文件夹。本地机器存储将位于子文件夹中:

    MachineKeys
    

    这是一种获取存储证书私钥信息的文件的方法。

    1. 首先进入本地机器个人证书存储:

      PS> cd cert:\LocalMachine\My
      
    2. 现在您必须处理您的证书。有不止一种方法可以做到这一点,这里有一种使用指纹的方法:

      $cert = dir | ? {$_.Thumbprint -eq "232820EEBF7DBFA01EE68A28BA0450671F862AE1"}
      
    3. 现在你可以像这样找到私钥文件名:

      $fileName = $cert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
      $keyFile = dir -Path "C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto" -Recurse | ? {$_.Name -eq $fileName}
      
    4. $keyFile 将是 FileInfo 对象,您可以使用 Set-ACL 或 icacls.exe 更改 ACL

    【讨论】:

    • 非常感谢您。它给了我正确的方向,而且我还找到了一个完全做到这一点的博客tinyurl.com/cbsmpqk。看来您确实完全了解我要实现的目标,您将授予哪个角色读取私钥而不损害网站安全性的权限?我已经把它给了用户并且它有效,只是想知道这是否意味着只有机器上的用户才能阅读它或互联网上的任何人,以及后果是什么。谢谢
    • 始终遵循最小许可规则。我认为您在未修改 ACL 的情况下遇到错误。您应该能够在启动您的应用程序时使用 procmon 准确确定正在尝试访问私有帐户的帐户。由于您知道私钥文件路径是什么,请查看 procmon 日志中的 ACCESS DENIED 并检查属性以查看它是什么帐户。我猜这将是应用程序池标识。
    猜你喜欢
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 2017-12-08
    • 2011-04-13
    • 1970-01-01
    相关资源
    最近更新 更多