If you have a PKCS#12 file which is not protected with a password, and which does have a MAC entry, opening the file will work on Windows and Linux but fails on Mac (which use CommonCrypto).
This is a regression on macOS as this worked with .NET Core 1.x (when using OpenSSL) and no longer works with .NET Core 2.0.
The following unit test reproduces the behavior:
using System;
using System.Security.Cryptography.X509Certificates;
using Xunit;
namespace temp
{
public class UnitTest1
{
[Fact]
public void Test1()
{
var cert = new X509Certificate("my_pkcs12.pfx");
Assert.NotNull(cert);
}
}
}
The test passes on Windows & Linux but fails on macOS with the following error message:
Failed certs.UnitTest1.Test1
Error Message:
Interop+AppleCrypto+AppleCommonCryptoCryptographicException : MAC verification failed during PKCS12 import (wrong password?)
Stack Trace:
at Interop.AppleCrypto.X509ImportCertificate(Byte[] bytes, X509ContentType contentType, SafePasswordHandle importPassword, SafeKeychainHandle keychain, Boolean exportable, SafeSecIdentityHandle& identityHandle)
at Internal.Cryptography.Pal.CertificatePal.FromBlob(Byte[] rawData, SafePasswordHandle password, X509KeyStorageFlags keyStorageFlags)
at System.Security.Cryptography.X509Certificates.X509Certificate..ctor(String fileName, String password, X509KeyStorageFlags keyStorageFlags)
at System.Security.Cryptography.X509Certificates.X509Certificate..ctor(String fileName)
at certs.UnitTest1.Test1() in /Users/quamotion/scratch/certs/UnitTest1.cs:line 12
my_pkcs12.pfx can be generated using the following script, use an empty password when prompted:
openssl genrsa -out my_key.key 2048
openssl req -new -key my_key.key -out my_request.csr
openssl x509 -req -days 3650 -in my_request.csr -signkey my_key.key -out my_cert.crt
openssl pkcs12 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -export -in my_cert.crt -inkey my_key.key -out my_pkcs12.pfx -name "my-name"
This is not the same as #18254, that one was about p12 stores where the MAC is absent; in this case there is a valid MAC.
If you have a PKCS#12 file which is not protected with a password, and which does have a MAC entry, opening the file will work on Windows and Linux but fails on Mac (which use CommonCrypto).
This is a regression on macOS as this worked with .NET Core 1.x (when using OpenSSL) and no longer works with .NET Core 2.0.
The following unit test reproduces the behavior:
The test passes on Windows & Linux but fails on macOS with the following error message:
my_pkcs12.pfxcan be generated using the following script, use an empty password when prompted:This is not the same as #18254, that one was about p12 stores where the MAC is absent; in this case there is a valid MAC.