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:
setAcl /test/abc x509:CN=hostname,OU=Unknown,O=Unknown,L=Unknown,ST=Unknown,C=Unknown:crwda
a úplně stejně dopadnu, pokud to zkusím v kusu kódu v C:
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:
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.