Это просто проблема форматирования, то есть X509Certificate2 должен вернуть вам расшифрованный открытый ключ (или потерпеть неудачу, например, неверный пароль).
Я предлагаю вам следовать тому, что Mono делает со строгим именемсборки, т. е. собственный sn инструмент.Хотя sn.exe Mono напрямую не читает файлы PKCS # 12, он может читать из ключевых контейнеров, так что в итоге вы получите RSACryptoServiceProvider в обоих случаях.
Просто перейдите в исходный код, все это на C # и не очень длинный, и вы найдете там то, что вам нужно (или в одном из нескольких участвующих вспомогательных классов).