Openssl p12 certificate storage extract individual certificates preserving names

$ find / -path "*/metadata/*" -name "*.xml"

или, в зависимости от ваших потребностей, просто

$ find / -path "*/metadata/*.xml"

Но это не то же самое.

  • Первый найдет все файлы с суффиксом .xml с путем, который содержит каталог метаданных . Файлы могут находиться на несколько уровней ниже этого каталога.

  • Второй найдет все файлы с суффиксом .xml , которые находятся в каталоге метаданных .

Примечание: я использую / , как вы сказали, «в файловой системе», что я интерпретировал как «где угодно».

В качестве альтернативы, используя locate (будут найдены только файлы, доступные для всех пользователей):

$ locate "/metadata/" | grep '\.xml$'

(Это будет работать как первая находка выше)

{{1 }}
1
19.07.2016, 06:49
1 ответ

Как вы и предполагали, вы можете легко разобрать вывод от openssl pkcs12, чтобы разделить части, если и только если идентификатором, который вам нужен, является friendlyname и/или localkeyid, потому что это единственные две части метаданных, которые обычно предоставляются. Например, для закрытых ключей используется только friendlyName, потому что это проще и обычно должно быть достаточно:

openssl pkcs12 -in combined -nocerts | awk '/friendlyName:/{n=$2} \
/^-----BEGIN.*PRIVATE/,/^-----END.*PRIVATE/{print >n".key"}' 

Это требует ввода пароля входного p12, а также ввода двойного пароля для каждого выходного ключа; чтобы избежать этого, вы можете добавить опции -passin и -passout, как указано на странице руководства (при условии, что все выходные ключи будут использовать один и тот же пароль). Или, если можно, чтобы личные ключи НЕ шифровались, добавьте -nodes -- если вы оперативно поместите их обратно в новые (и зашифрованные) файлы p12 и надежно сотрете (например, shred) незашифрованные файлы, это будет безопасно; в противном случае вам нужно быть очень осторожным, чтобы никто посторонний не смог посмотреть или получить копию незашифрованных личных ключей.

То же самое можно сделать и с сертификатами, но, возможно, в этом нет необходимости. Если единственное, что вам нужно, это создать отдельные файлы p12, как вы описали, и ваши приватные ключи все разные, вы можете просто сделать для каждого приватного ключа

cat $one.key allcerts | openssl pkcs12 -export (other options) >$one.p12 

и он будет помещать в каждый выходной p12 только один сертификат из входных allcerts, который соответствует ключу.

Альтернативно, вместо заранее написанной openssl командной строки, вы можете написать программу, используя библиотеку openssl, которая делает все, что вам угодно: тыкается внутри каждого из пакетов и подпакетов (после расшифровки), вытаскивает любые данные, которые вам нравятся, модифицирует их (возможно, переводит специальные символы и т.д.), и так далее. Однако это значительно большая работа.

2
27.01.2020, 23:35

Теги

Похожие вопросы