.pem в X509Certificate2

95
22 января 2021, 11:50

Доброго времени суток

У меня есть pem файл, который содержит в себе несколько сертификатов:

-----BEGIN CERTIFICATE-----
MIIE/zCCBGgCAg4CMA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG
A1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE
MRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl
YiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw
ODIyMDcyNzIyWhcNMTcwODIxMDcyNzIyWjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE
CAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs
ZS5jb20wggNHMIICOQYHKoZIzjgEATCCAiwCggEBAMbmu6uSdZWRxnO5PteARz5I
nrdM7vJadzJcY9Spf0cAhUDWyINCrUDn8h8QjbMiAxd+E7v5N85TbfvrW+/g7lYa
e7DB0uX02Rw29yoK+TE/znNTNq6HdPn/H4ll77uJqpkWgQwXgAQ3qDKRv96QaTfr
fSXYRxG9NvKzUBs9S7Woby7K6Pgh7/EmgeiOHKSX49XD+ihvkFRSFdeL5qV5hzDf
epfk8Ghl0cyK9jpM/yKlRuUUkP1pSMwUrCrptyRpqqXmam0UfFuFhMT2SJyNTyo2
SfnyZb78lbYcVLJQLJA+O3l469eOH3Odv/Pq7bvOstBKg96Q7imz5t0honf63EMC
IQCw7FeY0QQbxWYy+MI8/0m2kiRzIruA8RUPcEs4il1mwwKCAQB4W3QLepQRTWhR
69Xv+fC5JLEDyngw9KEalKorlg6o4Z9hASMbFMwECjlXZCxKd/NFjUMbtPcrMCoa
/KuaqRvHLs2bqe94X5VR4lWCv0SgOunKBj58jnVuN/OkkLu4cSZQ/jia/yPkdcMv
w8ZjF7zjPXGVhh9XC0QU9ipVfrreGaBSN+0zODKY5TyQI84FsZFZNetOTIT0HT2S
fIDRGYaL/0xMfQx070Z07cdTTuibzJHVr38qjKqEDiwAUyjXVdE+GJ15ZD4d56Ef
0qgRpzDmuvUjOtv1t8Hr2O2HTABqRMtAKZsLEVPjwnpKpcStixfg0uIPGVIKbej4
FzHHpO6bA4IBBgACggEBAJNRaaTFe253sOVm/JmUgsO1QB5GI5hOEWLpC8KHxgwn
nf/GQUaJLrN8TT4hXgJM2CdvdAkY6et1HpT6BUoz1cYTgsE3ToIsbH3SzPJvU7jz
cPOvY1jQv+xVBrU8Ydw2D8pydbAcw/L6JZnGpFBqeHa1iFAQc0B8ToXEgxnmGAdP
IOAKAHX0S4m6CrP5fKwYbmzu8WuWO4bRqvX7QJofrs2RaGFESulw0VrMFffJ/guf
HTvhDaMW7TSCKo1tBZK9SdEbWCQN2stnfnRSyZFQ+v02oyQtLg+3vSuCx4PS9DM9
/Uh3r9JDDH3GveUMbqw8Dmy6WH9iV3oOJt8aVF8F4CMwDQYJKoZIhvcNAQEFBQAD
gYEAbxDoJM8vKVfhltpfG3YXmBKnoGb2UpdKpcjmxMt1/yX8lWJaRBwUDeiDqjVC
JGi9gXO2SDAtXl7GI1cXTs/l7QlmoTmnc6kDwqk3pl6jC72rQH3E/Fpg7hBkSWL9
3V1dbLU5id63lVD8sUEULyfWFGk3L+Uka5oiSsxwZhdIb/Q=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
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
bktiLOD6KaA=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIC2jCCAkMCAg38MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG
A1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE
MRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl
YiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw
ODIyMDUyNzQxWhcNMTcwODIxMDUyNzQxWjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE
CAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs
ZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0z9FeMynsC8+u
dvX+LciZxnh5uRj4C9S6tNeeAlIGCfQYk0zUcNFCoCkTknNQd/YEiawDLNbxBqut
bMDZ1aarys1a0lYmUeVLCIqvzBkPJTSQsCopQQ9V8WuT252zzNzs68dVGNdCJd5J
NRQykpwexmnjPPv0mvj7i8XgG379TyW6P+WWV5okeUkXJ9eJS2ouDYdR2SM9BoVW
+FgxDu6BmXhozW5EfsnajFp7HL8kQClI0QOc79yuKl3492rH6bzFsFn2lfwWy9ic
7cP8EpCTeFp1tFaD+vxBhPZkeTQ1HKx6hQ5zeHIB5ySJJZ7af2W8r4eTGYzbdRW2
4DDHCPhZAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAQMv+BFvGdMVzkQaQ3/+2noVz
/uAKbzpEL8xTcxYyP3lkOeh4FoxiSWqy5pGFALdPONoDuYFpLhjJSZaEwuvjI/Tr
rGhLV1pRG9frwDFshqD2Vaj4ENBCBh6UpeBop5+285zQ4SI7q4U9oSebUDJiuOx6
+tZ9KynmrbJpTSi0+BM=
-----END CERTIFICATE-----

Например так ↑

Насколько я понимаю, pem является контейнером независимых друг от друга сертификатов.

Когда я пытаюсь получить тип этого файла-сертификата в коде следующим способом:

X509Certificate2.GetCertContentType(certBytes);

я получаю

X509ContentType.Cert //(A single X.509 certificate)

и

new X509Certificate2(certBytes)

достаёт данные только первого сертификата.

Можно ли стандартными средствами превратить байты этого файла в X509Certificate2[]?

Или придётся парсить и доставать этот base64 самостоятельно? Помимо этого, в файле могут быть такие данные как:

Bag Attributes
    localKeyID: 53 61 6D 70 6C 65 20 54 65 78 74 53 61 6D 70 6C 65 20 54 65
subject=/CN=www.website.info
issuer=/C=US/O=MyCert Inc/OU=www.website.com/
-----BEGIN CERTIFICATE-----
...
Answer 1

В итоге решил проблему следующим образом:

const string PemCertificateEnd = "-----END CERTIFICATE-----";
var separatedCertificates = Encoding.UTF8.GetString(сontent)
    .Split(new[] { PemCertificateEnd }, StringSplitOptions.None)
    .Select(x => x + PemCertificateEnd)
    .Select(x => Encoding.UTF8.GetBytes(x))
    .ToList();
separatedCertificates.RemoveAt(separatedCertificates.Count - 1);
return separatedCertificates.Select(x => new X509Certificate2(x)).ToArray();
READ ALSO
c# как писать xPath [дубликат]

c# как писать xPath [дубликат]

Мне нужно использовать такой xPath //*[@id="contact_methods"]/li[2]/div/strong но компилятор не принимает его из за двойных кавычек, побывал нечто такое "//*[@id=" + "contact_methods"...

110
Рисование графов C# WinForms

Рисование графов C# WinForms

необходимо рисовать на winform графы имея лишь матрицы расстояний между пунктами

87
Бэкап mysql на kvm гипервизоре

Бэкап mysql на kvm гипервизоре

Допустим, существует некий centos7 сервер с libvirt (гипервизор)На этом сервере запущена виртуальная машина (гость) в которую проброшен lvm-раздел...

151
Mysql. Подвисание запросов при LOAD DATA INFILE

Mysql. Подвисание запросов при LOAD DATA INFILE

При загрузке 4гб CSV в БД, наблюдаются подвисания запросов соседней БДТ

98