Используйте 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 без каких-либо предварительных изменений.