Используйте curl для загрузки только значения атрибута LDAP

Я использую следующую команду curl для загрузки значения из каталога LDAP:

curl  ldap://example.com/CN=ACME-Test-CRL,O=ACME?certificateRevocationList;binary -o crl.crl

Проблема в том, что он записывает в файл crl.crl следующее:

DN: CN=ACME-Test-CRL,O=ACME certificateRevocationList;binary: MIICxzCBsAIBATAN...

Когда я хочу только C64 в кодировке base64, то есть, что начало MIICxzCBsAIBATAN

В любом случае, нужно ли curl просто записать двоичное значение в кодировке base64 в файл?

2 ответа

При попытке применить CRL моего ЦС Active Directory к команде OpenVPN "crl-verify" возникла та же проблема.

Мое решение заключается в следующем:

curl -o CAName.ldap -u domain\\username:password "ldap://domaincontroller.domain.local/CN=CAName,CN=ServerName,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=local?certificateRevocationList" && grep -Po '(?<=certificateRevocationList:: )(.+)' CAName.ldap > CAName.b64 && base64 -d CAName.b64 > CAName.der && openssl crl -inform DER -in CAName.der -outform PEM -out CAName.pem

Объяснение:

curl -o CAName.ldap -u domain\\username:password "ldap://domaincontroller.domain.local/CN=CAName,CN=ServerName,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=local?certificateRevocationList"

Эта команда загружает двоичную часть с DN и зашифрованным содержимым base64 в выходной файл "-o CAName.ldap". Часть "-u" необходима для неанонимного связывания ldap.

grep -Po '(?<=certificateRevocationList:: )(.+)' CAName.ldap > CAName.b64

Это получает часть base64 в новый файл "CAName.b64"

base64 -d CAName.b64 > CAName.der

Расшифровать содержимое base64 (в двоичный файл из запроса ldap) в новый файл "CAName.der"

openssl crl -inform DER -in CAName.der -outform PEM -out CAName.pem

Теперь преобразуйте DER (двоичный файл) в PEM для "crl-verify" OpenVPN.

Вы можете проверить содержимое с помощью openssl:

openssl crl -inform PEM -text -noout -in CAName.pem

4 года спустя...

Полученный вами файл имеет формат обмена данными LDAP (LDIF) . В лучшем случае вы бы использовалиLDIFанализировать, чтобы получитьcertificateRevocationListатрибут (см. ниже). Однако ни один из серверов CRL, с которыми я столкнулся, должным образом не применяет синтаксис LDIF, поэтому анализаторы испытывают трудности с пониманием этих файлов. Это оставляет вам ручной анализ:

      curl ldap://endpoint | 
  sed -n 's/[[:space:]]*certificaterevocationlist;binary:: \(.*\)/\1/p' > file.crl

Приведенный выше код сохраняет значение CRL в формате Base64 вfile.crl. Однако вы можете напрямую передать код вopensslдля дальнейшей обработки:

      curl ldap://endpoint | 
  sed -n 's/[[:space:]]*certificaterevocationlist;binary:: \(.*\)/\1/p' |
  base64 --decode |
  openssl crl -inform der -noout -text

Несколько советов:

Следует отметить, что анализ структурированных данных вручную, т.е. с использованиемgrep,awkи т. д., это вообще очень плохая идея. я используюsedздесь в крайнем случае, так как ни один из опробованных мною парсеров(Net::LDAP::Entryдля Перла,для Python иldifдля nodeJS) смогли проанализировать файл LDIF без каких-либо предварительных изменений.

Другие вопросы по тегам