Estou tentando usar o atributo 'userCertificate' para manter um arquivo 'der'. Posso adicionar felizmente meu certificado usando o ldif:
dn: cn=bob,ou=users,dc=home
changetype: modify
add: userCertificate;binary
userCertificate;binary:< file:///home/bob/cert.der
Vejo meu certificado na codificação base64 quando faço uma pesquisa ldap e a vida parece boa. Mas quando tento usar o ldapcompare:
ldapcompare -D"cn=admin,dc=home" -W "cn=bob,ou=users,dc=home" "userCertificate;binary:< file:///home/bob/cert.der"
Eu recebo o erro:
Resultado da comparação: sintaxe inválida (21)
Informações adicionais: não é possível normalizar o valor para correspondência
INDEFINIDO
Recebo o mesmo erro se tento comparar usando a codificação base64
ldapcompare -D"cn=admin,dc=home" -W "cn=bob,ou=users,dc=home" "userCertificate:: base64encodedStringOfStuff"
Alguma ideia?
Esta mensagem de erro refere-se claramente ao que é obrigatório na RFC 4523, seção 2.1 . Você simplesmente sempre precisa anexar
;binary
ao nome do atributo em todas as operações LDAP que afetam o atributo userCertificate .Ao usar a operação de comparação, você deve verificar qual regra de correspondência EQUALITY está disponível para o atributo assertion.
No subesquema , userCertificate é declarado com
EQUALITY certificateExactMatch
base no nome do emissor e no número de série (consulte RFC 4523, seção 2.5 ), o que significa que não há nenhuma correspondência de string de octeto pura disponível para esse atributo.Portanto, você precisa extrair o número de série decimal e o DN do emissor (representação de string LDAP) do certificado:
Converta serial hexadecimal para decimal que está
1005070
neste exemplo e invoque ldapcompare assim:Notas Adicionais:
;binary
tipo de transferência para a operação de comparação. Mas com o OpenLDAP também não vai doer. Não tenho certeza sobre outras implementações de servidor LDAP.Observe que eu tinha um certificado codificado por PEM, não um codificado por DER. Você pode usar
openssl
para converter/exibir DER em PEM:openssl x509 -in /home/bob/cert.der -inform DER
Este comando exibirá seu certificado no formato PEM. Algo assim:
Eu removi as linhas superior e inferior apenas para ter a parte codificada em Base64. E executei o seguinte comando para carregá-lo no
usercertificate
atributo:Observe o espaço único inicial na frente de cada linha codificada em Base64. É o marcador de continuação no LDIF. E, quando pesquiso usando
ldapsearch
, vejo:Nunca consegui trabalhar com a
< file:
diretiva contra um arquivo DER ou PEM (sem osCERTIFICATE
marcadores). Farei mais investigações para ver o que está faltando. No entanto, se você reduzir as várias linhas do certificado codificado em Base64 (formato PEM) para uma única linha, poderá fazer a comparação comoAtualizarei isso se/quando puder fazê-lo funcionar com a
< file:
diretiva.