ASP.NET C#Web应用程序中的GPG加密 - 无公钥

时间:2013-05-09 08:25:08

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

我在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用户访问?

2 个答案:

答案 0 :(得分:2)

<强>研究

继续研究引导我提出这个问题: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. 密钥现在有效:)

答案 1 :(得分:1)

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