首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MimeKit -需要帮助加载pfx文件: NullReferenceException

MimeKit -需要帮助加载pfx文件: NullReferenceException
EN

Stack Overflow用户
提问于 2020-03-29 06:35:53
回答 1查看 171关注 0票数 0

我是C#和mimekit的新手,正在尝试从MimeKits github自述文件中进行基本的S/MIME设置。正在尝试加载pfx文件以解密S/MIME邮件。我的代码:

代码语言:javascript
复制
    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上下文文件:

代码语言:javascript
复制
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(...)时,我得到的结果是:

代码语言:javascript
复制
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有数据。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-29 07:11:15

这是MimeKit 2.5.2中的一个错误,当证书的SubjectKeyIdentifier为空时会发生此错误。

尝试来自https://www.myget.org/feed/mimekit/package/nuget/MimeKit的nuget

我刚刚做了一个修复,2.5.2.16版本应该包含对此的修复。

如果不起作用,请让我知道。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60907837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档