MimeKit - нужна помощь при загрузке файла pfx: NullReferenceException - PullRequest
0 голосов
/ 29 марта 2020

Я новичок в C# и mimekit и пытаюсь выполнить базовую настройку c S / MIME из MimeKits github README. Попытка загрузить файл pfx для расшифровки сообщений S / MIME. Мой код:

    public void LoadFile(string filename)
    {
        this.Message = MimeMessage.Load(filename);
        Console.WriteLine($"Loaded {filename}.");
        CryptographyContext.Register(typeof(MySecureMimeContext));
        using (var ctx = new MySecureMimeContext())
        {
            using (var stream = File.OpenRead("/path/to/keyStore.p12"))
            {
                ctx.Import(stream, "testas2");
            }
        }
    }

И вот файл безопасного контекста MIME:

using System.IO;
using System.Data.SQLite;
using MimeKit.Cryptography;

namespace dotnet_smime
{
class MySecureMimeContext : DefaultSecureMimeContext
{
    public MySecureMimeContext() : base(OpenDatabase("certdb.sqlite"))
    {
    }

    static IX509CertificateDatabase OpenDatabase(string fileName)
    {
        var builder = new SQLiteConnectionStringBuilder();
        builder.DateTimeFormat = SQLiteDateFormats.Ticks;
        builder.DataSource = fileName;

        if (!File.Exists(fileName))
            SQLiteConnection.CreateFile(fileName);

        var sqlite = new SQLiteConnection(builder.ConnectionString);
        sqlite.Open();

        return new SqliteCertificateDatabase(sqlite, "password");
    }
}
}

Когда код вызывает ctx.Import (...), я получаю это:

Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
   at MimeKit.Cryptography.BouncyCastleCertificateExtensions.AsHex(Byte[] blob)
   at MimeKit.Cryptography.X509CertificateDatabase.GetValue(X509CertificateRecord record, String columnName)
   at MimeKit.Cryptography.SqlCertificateDatabase.GetInsertCommand(X509CertificateRecord record)
   at MimeKit.Cryptography.X509CertificateDatabase.Add(X509CertificateRecord record)
   at MimeKit.Cryptography.DefaultSecureMimeContext.Import(Stream stream, String password)
   at dotnet_smime.MimePkcs7.LoadFile(String filename) in /Users/sakwaalvitre/projects/edi/dotnet-smime/MimePkcs7.cs:line 27
   at dotnet_smime.Program.Main(String[] args) in /Users/sakwaalvitre/projects/edi/dotnet-smime/Program.cs:line 19

Насколько я могу судить, ctx и stream определены, а stream имеет данные.

Заранее спасибо!

1 Ответ

1 голос
/ 29 марта 2020

Это ошибка в MimeKit 2.5.2, которая возникает, когда сертификат имеет нулевой SubjectKeyIdentifier.

Попробуйте использовать nuget из https://www.myget.org/feed/mimekit/package/nuget/MimeKit

Я просто сделал исправление, и сборка 2.5.2.16 должна содержать исправление для этого.

Если это не сработает, дайте мне знать.

...