#c# #.net-core #x509certificate #.net-5
Вопрос:
Я знаю, что для Windows X509Certificate2
используется Crypt32 и X509Certificate2.Handle
указывает на CERT_CONTEXT
структуру.
С другой стороны, в Linux X509Certificate2
используется открытый SSL под капотом. Итак, на что X509Certificate2.Handle
указывает структура в данном случае?
Это то же CERT_CONTEXT
самое или что-то другое?
Комментарии:
1. Смотрите здесь, к чему призывает дескриптор Unix PAL для x509 для создания (и комментарии над ним) source.dot.net/#System. Безопасность. Криптография.x509сертификаты/…
2. Я знаю, что это не дает вам прямого ответа, но вы можете использовать информацию в комментарии и точку входа, на которую ссылается метод extern, для вашего ответа. Это явно отличается от версии для Windows, но это все, что я могу сказать
3.
CERT_CONTEXT
с другой стороны, является частью исходного кода Windows (однако прямых ссылок на него нет)… Его частьInterop.WinCrypt
, поэтому я думаю, что, возможно, он не используется в Linux (но не могу сказать с абсолютной уверенностью) source.dot.net/#Microsoft. ДотНет. Библиотека подписей/Взаимодействие/…4. Вот ссылки на то, как я нашел его в своем первом комментарии. Этот вызов
CertificatePal.FromHandle
получает переданный дескриптор, созданный вызовом по 1-й ссылке: source.dot.net/#System. Безопасность. Криптография.x509сертифицирует/… И вот сам Unix PAL source.dot.net/#System. Безопасность. Криптография.X509Certificates/… — — вызывается source.dot.net/#System. Безопасность. Криптография.x509сертификаты/…5. И, наконец, вы можете увидеть весь уровень Unix PAL по любой из этих последних трех ссылок, посмотрев на расширенную папку в навигации (Внутренняя/Криптографическая/PAL.Unix), где вы найдете почти всю реализацию Linux для сертификатов. Это может предоставить дополнительную информацию, которая может привести вас к тому, что вы ищете.
Ответ №1:
Это X509*
значение OpenSSL.
На всех платформах он представляет собой «указатель, созданный системной криптографической библиотекой, представляющий сертификат открытого ключа X. 509». Так что Windows-это a PCERT_CONTEXT
, macOS-это a SecCertificateRef
, а Linux-это an X509*
.
На всех платформах у вас действительно должна быть очень веская причина, прежде чем использовать значение дескриптора.
Комментарии:
1. Что ж, у меня есть причина работать с ручками. .NET не поддерживает российские национальные стандарты шифрования и по-прежнему не может быть расширен для использования сторонним поставщиком из-за уродливой архитектуры внутри. На самом деле, ты это знаешь. ) Вот почему мне приходится иметь дело с собственной библиотекой, которая имитирует крипто-API Windows в Linux. В моем случае нет другого способа получить кроссплатформенную криптографию. Просто хотел убедиться, что представление памяти отличается в зависимости от платформы. Большое спасибо!