Fórum Root.cz

Hlavní témata => Server => Téma založeno: M_D 10. 01. 2021, 10:09:05

Název: Apache ZooKeeper a ACL dle x509?
Přispěvatel: M_D 10. 01. 2021, 10:09:05
Prosím, nemáte někdo v provozu Apache ZooKeeper a ideálně používáte ACL vázané na certifikát klienta? Marně se snažím přijít na to, jak vytvořit správně formátovaný ACL záznam, aby to ZK sežral a nevracel "milovanou" hlášku ZINVALIDACL = -114, /*!< Invalid ACL specified */
Nedaří se ručně pomocí zkCli:
Kód: [Vybrat]
setAcl /test/abc x509:CN=hostname,OU=Unknown,O=Unknown,L=Unknown,ST=Unknown,C=Unknown:crwdaa úplně stejně dopadnu, pokud to zkusím v kusu kódu v C:
Kód: [Vybrat]
        struct ACL ACLS[] = {
                {ZOO_PERM_ALL, {"auth", ""}},
                {ZOO_PERM_ALL, {"ip", "10.84.0.0/16"}},
                {ZOO_PERM_ALL, {"digest", "pokuston:wyEc72aaKNw9SXjCYLYECn9YWvg="}},
                {ZOO_PERM_ALL, {"x509", "CN=hostname,OU=Unknown,O=Unknown,L=Unknown,ST=Unknown,C=Unknown"}},
                {ZOO_PERM_READ, {"world", "anyone"}}

        };
        struct ACL_vector ACL_VEC = {5, ACLS};

        if ((rc=zoo_create(zh,"/xyz","value", 5, &ACL_VEC, 0, b, sizeof(b)-1))!=ZOK) {
                fprintf(stderr, "zoo_create() failed... %d\n", rc);
                return 4;
        }
Legenda (tady dokumentace) říká, že u schématu x509 se použije "x509 uses the client X500 Principal as an ACL ID identity", ale nikde jsem nenašel funkční příklad. Jen pár zoufalců řešících, jak to zadat. Jednu zmínku, že zkCli je rozbitý a nejde to zadat, tak pokus nativně v C dopadne stejně ( https://mchesnavsky.tech/zookeeper-x509-certificates-acl/ ).
Klient se přihlásí, server si zaloguje, že automaticky vytvořil x509 identitu na základě certifikátu klienta (takže klient nemusí explicitně volat addauth), ale jak udělat ACL, kde je to použito... Pokud z logu okopíruju tu x509 identitu, tak to také nesežere volání pro nastavení ACL:
Kód: [Vybrat]
Authenticated Id '1.2.840.113549.1.9.1=#160c61646d696e407465732e6575,CN=klient,OU=I,O=FIRMA,L=Mesto,C=CZ' for Scheme 'x509'Použití schémat ip/digest/world funguje OK. Zkoušeno na ZK 3.5.6 a ověřen stejný výsledek na posledním 3.6.2.
Název: Re:Apache ZooKeeper a ACL dle x509?
Přispěvatel: RDa 10. 01. 2021, 12:47:04
Podivat se do zdrojaku, jake podminky jsou (ne)splneny pro onen ZINVALIDACL = -114 vysledek?
Název: Re:Apache ZooKeeper a ACL dle x509?
Přispěvatel: _Tomáš_ 10. 01. 2021, 15:47:10
to neporadím, všechny instance zookeeperu provozujeme nad kerberosem.

Mrkni ale do zdrojáků testů:
- https://github.com/apache/zookeeper/blob/master/zookeeper-server/src/main/java/org/apache/zookeeper/server/auth/X509AuthenticationProvider.java
- https://github.com/apache/zookeeper/blob/master/zookeeper-server/src/main/java/org/apache/zookeeper/common/ZKHostnameVerifier.java
- https://github.com/apache/zookeeper/blob/4e82a8be889d91dde46a11b38c8a20e82f3220f2/zookeeper-server/src/test/java/org/apache/zookeeper/test/X509AuthTest.java

Ten formát X500 pak pochází z java třídy, k jdk7 např. jejich dokumentace vypadá takhle https://docs.oracle.com/javase/7/docs/api/javax/security/auth/x500/X500Principal.html