'专用密钥'没有' CreateFromFile'的定义

时间:2016-08-17 23:02:11

标签: c# mono private-key httplistener

我正在尝试在我的应用程序中实现一个反映答案in this post

的解决方案

我有类似的情况,我在Ubuntu服务器上运行基于HttpListenerGrapevine的应用程序,我需要使用HTTPS使用Mono和我我正在尝试创建并包含相关键以允许HTTPS

我遇到的问题是解决方案的最后一行,

key = PrivateKey.CreateFromFile (pvk_file).RSA;

当我尝试相同的Visual Studio时,显示错误/文本突出显示为红色'PrivateKey' does not have a definition for 'CreateFromFile'

我使用错误的库还是我的代码本身的其他问题?

我的代码,缩减为相关方法。

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using System.Threading;
using java.security;

public class ConfigureCertificates
    {
        private readonly string _dirName;
        private readonly string _path;
        private readonly string _port;
        private readonly string _certFile;
        public ConfigureCertificates(string port)
        {
            _dirName = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            _path = Path.Combine(_dirName, ".mono");
            _path = Path.Combine(_path, "httplistener");
            _port = port;
            _certFile = Path.Combine(_path, String.Format("{0}.cer", _port));
        }

        public void SetUpCerts()
        {
            if (!File.Exists(_certFile))
               throw new Exception("Certificate file not found");

            string pvkFile = Path.Combine(_path, String.Format("{0}.pvk", _port));

            if (!File.Exists(pvkFile))
                throw new Exception("Private key not found");

            var cert = new X509Certificate2(_certFile);
            var key = PrivateKey.CreateFromFile(pvkFile).RSA; // Error occurs here
        }
    }

1 个答案:

答案 0 :(得分:1)

您有一个命名冲突 - 换句话说,还有另一个名为PrivateKey的类没有您需要的方法。 A quick Google hunt表示正确的类位于Mono.Security.Authenticode命名空间中。所以你需要引用完整的路径:

Mono.Security.Authenticode.PrivateKey.CreateFromFile(...)

如果您还没有Mono.Security套餐,则可能还需要添加它。