openLDAP ssl/tls Centos 6.3

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Pondělí Březen 10 17:24:36 CET 2014


On Mon, 10 Mar 2014, Kateřina Bubeníčková wrote:

> Z toho jsem pochopila, že potřebuju certifikáty moznss.

Potřebujete pro server veřejný a privátní klíč a k tomu veřejnému klíči 
ještě certifikát, který bude pro klienty akceptovatelný.

A protože se červení klobouci nějak rozhodli, že mají *knihovnu* NSS (má 
kořeny u Netscapu, teď patří k Mozille, proto se asi v té chybové hlášce 
objevuje "moznss") raději než OpenSSL, tak to svému OpenLDAPu musíte 
předložit ve formě databáze NSS.

> 1. postup
> [...]
> Protože už se snažím nějakou dobu, vygenerovala jsem db znovu pomocí
> #/usr/libexec/openldap/create-certdb.sh

To by mělo, jestli ten skript dobře chápu, vyrobit novou db a přidat do ní 
standardní sadu kořenových CA (ve formě modulu, takže nejsou vidět při 
použití certutil -L; tohle bych si dovolil považovat za poněkud 
kontroverzní nastavení a v mnoha situacích by mohlo být bezpečnější ten 
zvěřinec předdefinovaných CA zase rychle poslat do háje).

> /etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif
> olcTLSCACertificatePath: /etc/pki/tls/certs
> olcTLSCertificateKeyFile: "OpenLDAP Server"
> olcTLSCertificateFile: /etc/openldap/certs/password

Ta konfigurace je dost podivná, protože položky, které byly zjevně 
vymyšleny v kontextu OpenSSL (kde jsou to všechno jména souborů), byly 
nějak recyklovány pro použití s NSS (kde je jméno adresáře s databází,
nickname záznamu pro serverový klíč a certifikát, a soubor s heslem
k databázi).

Řekl bych, že tam máte špatně cestu k databázi (/etc/pki/tls/certs místo 
/etc/openldap/certs) a zbylé položky jsou asi obráceně: oba návody, na 
které odkazujete, mají v "olcTLSCertificateKeyFile" soubor s heslem a
v "olcTLSCertificateFile" nick.

> Ale nevím, co znamená CTU,u,u, a jestli ta databáze obsahuje
> všechno, co má.

Význam písmenek je možno nalézt v dokumentaci certutil:
<https://developer.mozilla.org/en-US/docs/NSS/tools/NSS_Tools_certutil>
(je to třikrát, protože poprvé je to pro použití v SSL/TLS, podruhé pro 
S/MIME tj. emaily a potřetí pro podepisování kódu).

> Zkusila bych třeba http://www.bradchen.com/blog/2012/08/openldap-tls-issue,
> ale zase u prvního příkazu nevím, co to mám napsat jako  "My Issuer",
> jestli je to někde důležité.

Ta část s "CN=My Issuer" vytvoří soukromou kořenovou certifikační autoritu 
(klíče a self-signed cert.) s uvedeným jménem.

V podstatě máte asi tři možné varianty postupu:

1. Pokud máte už nějakou existující certifikační autoritu a fungující PKI, 
tak použijete certutil -R k vygenerování klíčů a žádosti o certifikát
s vhodným DN, podle žádosti necháte vystavit certifikát a ten 
naimportujete pomocí certutil -A. Možná bude potřeba i naimportovat
i certifikát té CA (případně dalších nadřízených). Toto je ideově 
nejsprávnější varianta.

2. Vyrobíte si vlastní CA jen pro potřebu LDAPu. Pak můžete postupovat 
podle zmíněného návodu, akorát bych doporučil použít nějaká 
civilizovanější DN. Třeba něco jako "CN=ca, DC=mydomain, DC=cz" (je-li 
"mydomain.cz" vaše doména) místo toho "CN=My Issuer". Podobně jméno pro 
server.

3. Možná by fungovalo i použití self-signed certifikátu, který je sám sobě 
certifikační autoritou, tj. certutil -S s vhodnými dalšími parametry.
Pro pojmenování platí přiměřeně to, co je napsáno v předchozí možnosti.

Důležité je, že pak musíte klientům vysvětlit, že mají serverovému 
certifikátu věřit, jinak je to celé na nic. V případech 1 a 2 je potřeba 
jim někam dát certifikáty použitých CA, ve třetím případě přímo serverový 
certifikát. Pokud jsou klienti zase OpenLDAP na CentOSu 6, tak 
pravděpodobně používají stejnou db jako server (jenom by jim bez hesla 
měl zůstat utajen privátní klíč).

> 2.postup:
> [...]
> /etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif
> olcTLSCACertificateFile: /etc/pki/tls/certs/ca-bundle.crt
> olcTLSCACertificatePath: /etc/pki/tls/certs.bk2
> olcTLSCertificateFile: /etc/pki/tls/certs.bk2/ldap1_privkey.pem
> olcTLSCertificateKeyFile: /etc/pki/tls/certs.bk2/ldap1_privkey.key.pem

Tohle vypadá jako nastavení pro OpenSSL, a tudíž to takto fungovat ani 
nemůže.

-- 
Pavel Kankovsky aka Peak                          / Jeremiah 9:21        \
"For death is come up into our MS Windows(tm)..." \ 21st century edition /


Další informace o konferenci Linux