При запуске моего asp. net основного приложения локально в моем Linux Docker контейнере возникает следующая ошибка:
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)
... при создании экземпляра объекта X509Certificate2 в моем startup.cs:
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.
Я сгенерировал файл pfx на Linux следующим образом:
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
Мои настройки приложения. 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 выдает исключение говоря, что файл не существует.
Я включил каталог, содержащий файл pfx, в Docker -> Настройки -> Ресурсы -> Общий доступ к файлам
Кто угодно?