【问题标题】:Asp.net core, "asn1 encoding routines:asn1_d2i_read_bio:not enough data" error for certificateAsp.net 核心,“asn1 编码例程:asn1_d2i_read_bio:not enough data”证书错误
【发布时间】:2020-11-01 22:35:50
【问题描述】:

在我的 Linux Docker 容器中本地运行我的 asp.net 核心应用程序时,出现以下错误:

Unhandled exception. Interop+Crypto+OpenSslCryptographicException: error:0D06B08E:asn1 encoding routines:asn1_d2i_read_bio:not enough data
   at Internal.Cryptography.Pal.OpenSslX509CertificateReader.FromBio(SafeBioHandle bio, SafePasswordHandle password)
   at Internal.Cryptography.Pal.OpenSslX509CertificateReader.FromFile(String fileName, SafePasswordHandle password, X509KeyStorageFlags keyStorageFlags)

 

...在我的 startup.cs 中实例化 X509Certificate2 对象时发生:

        services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true).AddEntityFrameworkStores<ApplicationDbContext>();
        var identityServerBuilder = services.AddIdentityServer().AddApiAuthorization<ApplicationUser, ApplicationDbContext>();      

        var certificate = new X509Certificate2(@"abc.pfx", "abc"); // This is where the exception is thrown.
        identityServerBuilder.AddSigningCredential(certificate);

我需要这个自签名证书来运行 IdentityServer4。 在 Visual Studio 中调试时,我没有任何问题,我可以完美地评估 pfx 的所有属性。

我在Linux上生成的pfx文件如下:

openssl genrsa -out rsa.private 1024
openssl req -new -key rsa.private > rsa.csr
openssl x509 -req -in rsa.csr -signkey rsa.private -out rsa.crt 
openssl pkcs12 -export -in rsa.crt  -inkey rsa.private -out abc.pfx

...并验证其完整性:

openssl pkcs12 -nokeys -info -nocerts -in abc.pfx

...没有发现任何问题:

MAC: sha1, Iteration 2048
MAC length: 20, salt length: 8
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Certificate bag
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048

我还使用了 Microsoft 管理控制台来生成 pfx,但这会导致同样的错误。

我正在挂载我的 pfx 文件,执行这个 Docker 运行命令:

docker run -d=false -p 8080:80 -v abc.pfx:/app/abc.pfx --name mijncont mijncont:dev

我的 appsettings.json :

"IdentityServer": {
    "Clients": {
      "TEST.Client": {
        "Profile": "IdentityServerSPA"
      }
    },
    "Key": {
      "Type": "Store",
      "StoreName": "My",
      "StoreLocation": "LocalMachine",
      "Name": "CN=mijnsubject"
    }

运行时:

docker exec -it mijncont /bin/bash

...出现如下提示:

root@3815c63cb5c4:/app#

执行'ls -la'时

我明白了:

drwxr-xr-x 2 root root 4096 Jul 13 16:04 abc.pfx

但是,当我在 Startup.cs 中包含这一行时:

Console.WriteLine("Size: "+ new System.IO.FileInfo("abc.pfx").Length);

... .Net 抛出一个异常,说文件不存在。

我在 Docker -> 设置 -> 资源 -> 文件共享中包含了包含 pfx 文件的目录

有人吗?

【问题讨论】:

    标签: docker asp.net-core encryption certificate


    【解决方案1】:

    问题在于我挂载 abc.pfx 文件的方式。

    这个:

    docker run -d=false -p 8080:80 -v abc.pfx:/app/abc.pfx --name mijncont mijncont:dev
    

    ...在容器中挂载一个名为 abc.fpx 的目录(保存 abc.pfx 文件)

    如果我指定一个绝对路径:

    docker run -d=false -p 8080:80 -v C:\mysolution\abc.pfx:/app/abc.pfx --name mijncont 
    

    ...只有文件被挂载到我想要的“app”目录中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多