Какая структура X509Certificate2.Дескриптор указывает на в Linux?

#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. В моем случае нет другого способа получить кроссплатформенную криптографию. Просто хотел убедиться, что представление памяти отличается в зависимости от платформы. Большое спасибо!