【问题标题】:GPG encryption in an ASP.NET C# Web application - No Public KeyASP.NET C# Web 应用程序中的 GPG 加密 - 无公钥
【发布时间】:2013-05-09 08:25:07
【问题描述】:

我已经在 Windows Server 2008 R2 上设置了 Gpg4win,并且网站运行的是 .Net 4.5。

我正在使用 Starksoft OpenPGP dll。

我已通过远程桌面将所需的公钥添加到 Gpg4win,但是在浏览器中进行测试时,我在浏览器中得到以下信息:

gpg: EMAIL@EMAIL.COM: skipped: No public key gpg: [stdin]: encryption failed: No public key

我已经在我的机器上进行了本地测试,并直接在服务器上的 GPA 和 Kleopatra 中进行了测试,并且加密工作正常。这让我相信问题在于公钥是通过远程桌面设置的,并且无法被应用程序池或类似设备访问。

我已尝试按照某处的建议将 pubring.gpg、secring.gpg 和 trustdb.gpg 复制到网站的受保护子文件夹中(我现在忘记了在哪里),但这没有奏效。

知道如何设置 IIS 用户可以访问的公钥吗?

【问题讨论】:

  • GPG 密钥包含它们应该工作的电子邮件地址。也许邮件地址没有(精确地)包含在公钥中?在这种情况下,您需要改用密钥 ID...
  • 而且,顺便说一句,为什么它写“EMAIL@EMAIL>COM”? (">" 而不是 ".") 也许你的代码中印错了?
  • @NickolayOlshevsky - 只是我正在换班的例子中的一个错字
  • @owlstead 这无法解释为什么密钥对一个用户有效,而对另一个用户无效。问题不是关键不工作,问题是让钥匙串为服务器上的不同用户工作

标签: asp.net encryption iis-7.5 windows-server-2008 gnupg


【解决方案1】:

研究

继续研究将我引向这个 SO 问题:Gpg encryption over web browser 然后引导我通过 cmd 运行它 - Running Command line from an ASPX page, and returning output to page

解决方案

  1. 在某处导出所需的密钥(在本例中为 c:\public.key
  2. 使用以下代码创建一个页面并执行它

    System.Diagnostics.Process si = new System.Diagnostics.Process();
    si.StartInfo.WorkingDirectory = "c:\\";
    si.StartInfo.UseShellExecute = false;
    si.StartInfo.FileName = "cmd.exe";
    si.StartInfo.Arguments = "gpg --import c:\\public.key";
    si.StartInfo.CreateNoWindow = false;
    si.StartInfo.RedirectStandardInput = true;
    si.StartInfo.RedirectStandardOutput = true;
    si.StartInfo.RedirectStandardError = true;
    si.Start();
    string output = si.StandardOutput.ReadToEnd();
    si.Close();
    
  3. 密钥现在可以工作了 :)

【讨论】:

    【解决方案2】:

    GnuPG 在用户的主目录中查找密钥环,而 IIS 是由其他用户运行的,很可能是这个原因。您可以通过 --keyring 和 --secret-keyring 命令行开关指定公共和秘密密钥环的确切路径。

    【讨论】:

    • 这是我最初的想法,但是应用程序池用户没有用户目录。这些开关不能通过 Starksoft DLL 获得,或者至少我还没有找到任何应​​用它们的方法。
    • 在这种情况下,您应该联系 Starksoft 寻求支持。此外,还有许多其他适用于 .NET 的 OpenPGP 库,Google 为他们提供。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 2020-02-12
    • 2011-01-12
    • 1970-01-01
    相关资源
    最近更新 更多