From: Remi Gacogne Date: Wed, 31 Mar 2021 09:07:25 +0000 (+0200) Subject: dnsdist: API keys should now be hashed as well X-Git-Tag: dnsdist-1.7.0-alpha1~12^2~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=412f99efec4dcef5200d48792dfea587af12eb68;p=thirdparty%2Fpdns.git dnsdist: API keys should now be hashed as well --- diff --git a/regression-tests.dnsdist/test_API.py b/regression-tests.dnsdist/test_API.py index 03ab9de9d2..efb6d4c44d 100644 --- a/regression-tests.dnsdist/test_API.py +++ b/regression-tests.dnsdist/test_API.py @@ -15,7 +15,8 @@ class APITestsBase(DNSDistTest): _webServerBasicAuthPassword = 'secret' _webServerBasicAuthPasswordHashed = '$argon2id$v=19$m=65536,t=2,p=1$mTJBHtI/KyO8oVDy8wyizg$8NK4ap5ohC7ylY8Dua61iBqhQw0cbcmXUaOpotC2hC0' _webServerAPIKey = 'apisecret' - _config_params = ['_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKey'] + _webServerAPIKeyHashed = '$argon2id$v=19$m=65536,t=2,p=1$gw/ygc0SC6RID13ifimJhQ$nOBy+Tu+JYiQ4hRBhLpTNyaff7rlFPogYUAGGfy5134' + _config_params = ['_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKeyHashed'] _config_template = """ setACL({"127.0.0.1/32", "::1/128"}) newServer{address="127.0.0.1:%s", pool={'', 'mypool'}} @@ -369,7 +370,7 @@ class TestAPIServerDown(APITestsBase): class TestAPIWritable(APITestsBase): __test__ = True _APIWriteDir = '/tmp' - _config_params = ['_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKey', '_APIWriteDir'] + _config_params = ['_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKeyHashed', '_APIWriteDir'] _config_template = """ setACL({"127.0.0.1/32", "::1/128"}) newServer{address="127.0.0.1:%s"} @@ -443,7 +444,7 @@ class TestAPICustomHeaders(APITestsBase): _basicOnlyPath = '/' _consoleKey = DNSDistTest.generateConsoleKey() _consoleKeyB64 = base64.b64encode(_consoleKey).decode('ascii') - _config_params = ['_consoleKeyB64', '_consolePort', '_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKey'] + _config_params = ['_consoleKeyB64', '_consolePort', '_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKeyHashed'] _config_template = """ setKey("%s") controlSocket("127.0.0.1:%s") @@ -488,7 +489,7 @@ class TestStatsWithoutAuthentication(APITestsBase): _noAuthenticationPaths = [ '/metrics', '/jsonstat?command=dynblocklist' ] _consoleKey = DNSDistTest.generateConsoleKey() _consoleKeyB64 = base64.b64encode(_consoleKey).decode('ascii') - _config_params = ['_consoleKeyB64', '_consolePort', '_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKey'] + _config_params = ['_consoleKeyB64', '_consolePort', '_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKeyHashed'] _config_template = """ setKey("%s") controlSocket("127.0.0.1:%s") @@ -538,13 +539,14 @@ class TestAPIAuth(APITestsBase): _webServerBasicAuthPasswordNew = 'password' _webServerBasicAuthPasswordNewHashed = '$argon2id$v=19$m=65536,t=2,p=1$AYiZGEPogz3849qG//YsjA$ZG39i+yK8Pet8yNU8lJ9ktMbDyF2TuxC32TR74/Mx68' _webServerAPIKeyNew = 'apipassword' + _webServerAPIKeyNewHashed = '$argon2id$v=19$m=65536,t=2,p=1$hNE0zlMnk+9QNKLbQGZjyA$9y0rlN+asmT3p3uyCPTcSeeMGHcwgrrNwbRlDmmLSAA' # paths accessible using the API key only _apiOnlyPath = '/api/v1/servers/localhost/config' # paths accessible using basic auth only (list not exhaustive) _basicOnlyPath = '/' _consoleKey = DNSDistTest.generateConsoleKey() _consoleKeyB64 = base64.b64encode(_consoleKey).decode('ascii') - _config_params = ['_consoleKeyB64', '_consolePort', '_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKey'] + _config_params = ['_consoleKeyB64', '_consolePort', '_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKeyHashed'] _config_template = """ setKey("%s") controlSocket("127.0.0.1:%s") @@ -576,7 +578,7 @@ class TestAPIAuth(APITestsBase): """ url = 'http://127.0.0.1:' + str(self._webServerPort) + self._apiOnlyPath - self.sendConsoleCommand('setWebserverConfig({{apiKey="{}"}})'.format(self._webServerAPIKeyNew)) + self.sendConsoleCommand('setWebserverConfig({{apiKey="{}"}})'.format(self._webServerAPIKeyNewHashed)) headers = {'x-api-key': self._webServerAPIKeyNew} r = requests.get(url, headers=headers, timeout=self._webTimeout) @@ -594,7 +596,7 @@ class TestAPIAuth(APITestsBase): """ url = 'http://127.0.0.1:' + str(self._webServerPort) + self._apiOnlyPath - self.sendConsoleCommand('setWebserverConfig({{apiKey="{}"}})'.format(self._webServerAPIKeyNew)) + self.sendConsoleCommand('setWebserverConfig({{apiKey="{}"}})'.format(self._webServerAPIKeyNewHashed)) headers = {'x-api-key': self._webServerAPIKeyNew} r = requests.get(url, headers=headers, timeout=self._webTimeout) @@ -611,7 +613,7 @@ class TestAPIACL(APITestsBase): __test__ = True _consoleKey = DNSDistTest.generateConsoleKey() _consoleKeyB64 = base64.b64encode(_consoleKey).decode('ascii') - _config_params = ['_consoleKeyB64', '_consolePort', '_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKey'] + _config_params = ['_consoleKeyB64', '_consolePort', '_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKeyHashed'] _config_template = """ setKey("%s") controlSocket("127.0.0.1:%s") @@ -700,7 +702,7 @@ class TestWebConcurrentConnections(APITestsBase): __test__ = True _maxConns = 2 - _config_params = ['_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKey', '_maxConns'] + _config_params = ['_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKeyHashed', '_maxConns'] _config_template = """ newServer{address="127.0.0.1:%s"} webserver("127.0.0.1:%s") diff --git a/regression-tests.dnsdist/test_DynBlocks.py b/regression-tests.dnsdist/test_DynBlocks.py index fed5abde78..0d9a7cc4c4 100644 --- a/regression-tests.dnsdist/test_DynBlocks.py +++ b/regression-tests.dnsdist/test_DynBlocks.py @@ -17,6 +17,7 @@ class DynBlocksTest(DNSDistTest): _webServerBasicAuthPassword = 'secret' _webServerBasicAuthPasswordHashed = '$argon2id$v=19$m=65536,t=2,p=1$mTJBHtI/KyO8oVDy8wyizg$8NK4ap5ohC7ylY8Dua61iBqhQw0cbcmXUaOpotC2hC0' _webServerAPIKey = 'apisecret' + _webServerAPIKeyHashed = '$argon2id$v=19$m=65536,t=2,p=1$gw/ygc0SC6RID13ifimJhQ$nOBy+Tu+JYiQ4hRBhLpTNyaff7rlFPogYUAGGfy5134' def doTestDynBlockViaAPI(self, range, reason, minSeconds, maxSeconds, minBlocks, maxBlocks): headers = {'x-api-key': self._webServerAPIKey} @@ -569,7 +570,7 @@ class TestDynBlockQPS(DynBlocksTest): webserver("127.0.0.1:%s") setWebserverConfig({password="%s", apiKey="%s"}) """ - _config_params = ['_dynBlockQPS', '_dynBlockPeriod', '_dynBlockDuration', '_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKey'] + _config_params = ['_dynBlockQPS', '_dynBlockPeriod', '_dynBlockDuration', '_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKeyHashed'] def testDynBlocksQRate(self): """ @@ -594,7 +595,7 @@ class TestDynBlockGroupQPS(DynBlocksTest): webserver("127.0.0.1:%s") setWebserverConfig({password="%s", apiKey="%s"}) """ - _config_params = ['_dynBlockQPS', '_dynBlockPeriod', '_dynBlockDuration', '_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKey'] + _config_params = ['_dynBlockQPS', '_dynBlockPeriod', '_dynBlockDuration', '_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKeyHashed'] def testDynBlocksQRate(self): """ @@ -1150,7 +1151,7 @@ class TestDynBlockGroupNoOp(DynBlocksTest): webserver("127.0.0.1:%s") setWebserverConfig({password="%s", apiKey="%s"}) """ - _config_params = ['_dynBlockQPS', '_dynBlockPeriod', '_dynBlockDuration', '_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKey'] + _config_params = ['_dynBlockQPS', '_dynBlockPeriod', '_dynBlockDuration', '_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKeyHashed'] def testNoOp(self): """ @@ -1214,7 +1215,7 @@ class TestDynBlockGroupWarning(DynBlocksTest): webserver("127.0.0.1:%s") setWebserverConfig({password="%s", apiKey="%s"}) """ - _config_params = ['_dynBlockQPS', '_dynBlockPeriod', '_dynBlockDuration', '_dynBlockWarningQPS', '_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKey'] + _config_params = ['_dynBlockQPS', '_dynBlockPeriod', '_dynBlockDuration', '_dynBlockWarningQPS', '_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKeyHashed'] def testWarning(self): """ diff --git a/regression-tests.dnsdist/test_Prometheus.py b/regression-tests.dnsdist/test_Prometheus.py index be92ae2fa9..66b3523578 100644 --- a/regression-tests.dnsdist/test_Prometheus.py +++ b/regression-tests.dnsdist/test_Prometheus.py @@ -13,7 +13,8 @@ class TestPrometheus(DNSDistTest): _webServerBasicAuthPassword = 'secret' _webServerBasicAuthPasswordHashed = '$argon2id$v=19$m=65536,t=2,p=1$mTJBHtI/KyO8oVDy8wyizg$8NK4ap5ohC7ylY8Dua61iBqhQw0cbcmXUaOpotC2hC0' _webServerAPIKey = 'apisecret' - _config_params = ['_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKey'] + _webServerAPIKeyHashed = '$argon2id$v=19$m=65536,t=2,p=1$gw/ygc0SC6RID13ifimJhQ$nOBy+Tu+JYiQ4hRBhLpTNyaff7rlFPogYUAGGfy5134' + _config_params = ['_testServerPort', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKeyHashed'] _config_template = """ newServer{address="127.0.0.1:%s"} webserver("127.0.0.1:%s") diff --git a/regression-tests.dnsdist/test_TCPFastOpen.py b/regression-tests.dnsdist/test_TCPFastOpen.py index 0ce7b76537..c6231510e8 100644 --- a/regression-tests.dnsdist/test_TCPFastOpen.py +++ b/regression-tests.dnsdist/test_TCPFastOpen.py @@ -20,7 +20,8 @@ class TestBrokenTCPFastOpen(DNSDistTest): _webServerBasicAuthPassword = 'secret' _webServerBasicAuthPasswordHashed = '$argon2id$v=19$m=65536,t=2,p=1$mTJBHtI/KyO8oVDy8wyizg$8NK4ap5ohC7ylY8Dua61iBqhQw0cbcmXUaOpotC2hC0' _webServerAPIKey = 'apisecret' - _config_params = ['_testServerPort', '_testServerRetries', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKey'] + _webServerAPIKeyHashed = '$argon2id$v=19$m=65536,t=2,p=1$gw/ygc0SC6RID13ifimJhQ$nOBy+Tu+JYiQ4hRBhLpTNyaff7rlFPogYUAGGfy5134' + _config_params = ['_testServerPort', '_testServerRetries', '_webServerPort', '_webServerBasicAuthPasswordHashed', '_webServerAPIKeyHashed'] _config_template = """ newServer{address="127.0.0.1:%s", useClientSubnet=true, tcpFastOpen=true, retries=%d } webserver("127.0.0.1:%s")