Skip to content

Commit a66f498

Browse files
authored
Merge pull request withlogicco#66 from sourcelair/fix-no-certificate
Fix Ceryx crash when no certificate settings exist
2 parents 3d7c6c4 + 3817680 commit a66f498

File tree

7 files changed

+20
-5
lines changed

7 files changed

+20
-5
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ python:
44
- 3.6
55

66
env:
7-
- DOCKER_COMPOSE_VERSION=1.23.2 COMPOSE_FILE=docker-compose.yml:docker-compose.override.yml:docker-compose.test.yml
7+
- DOCKER_COMPOSE_VERSION=1.23.2 COMPOSE_FILE=docker-compose.yml:docker-compose.override.yml:docker-compose.test.yml CERYX_DISABLE_LETS_ENCRYPT=true
88

99
install:
1010
- pip install --upgrade --ignore-installed docker-compose==${DOCKER_COMPOSE_VERSION}

ceryx/Dockerfile.test

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,7 @@ COPY . ./
1515
ENV CERYX_DEBUG true
1616
ENV CERYX_DISABLE_LETS_ENCRYPT true
1717

18+
COPY --from=sourcelair/ceryx:latest /etc/ceryx/ssl/default.key /etc/ceryx/ssl/default.key
19+
COPY --from=sourcelair/ceryx:latest /etc/ceryx/ssl/default.crt /etc/ceryx/ssl/default.crt
20+
1821
CMD ["pytest", "tests/"]

ceryx/nginx/conf/nginx.conf.tmpl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ user www-data www-data;
22
worker_processes 1;
33
pid /run/nginx.pid;
44

5+
env CERYX_DISABLE_LETS_ENCRYPT;
56
env CERYX_REDIS_PREFIX;
67
env CERYX_REDIS_HOST;
78
env CERYX_REDIS_PASSWORD;

ceryx/nginx/lualib/certificate.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ end
1313

1414
local host_certificates = certificates.getCertificatesForHost(host)
1515

16-
if certificates ~= nil then
16+
if host_certificates ~= nil then
1717
-- Convert data from PEM to DER
1818
local certificate_der, certificate_der_err = ssl.cert_pem_to_der(host_certificates["certificate"])
1919
if not certificate_der or certificate_der_err then

ceryx/nginx/lualib/ceryx/certificates.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ function getCertificatesForHost(host)
1515
local certificate_path, certificate_err = redisClient:hget(certificates_redis_key, "certificate_path")
1616
local key_path, key_err = redisClient:hget(certificates_redis_key, "key_path")
1717

18-
if certificate_path == nil then
18+
if certificate_path == ngx.null then
1919
ngx.log(ngx.ERR, "Could not retrieve SSL certificate path for " .. host .. " from Redis: " .. (certificate_err or "N/A"))
2020
return nil
2121
end
2222

23-
if key_path == nil then
23+
if key_path == ngx.null then
2424
ngx.log(ngx.ERR, "Could not retrieve SSL key path for " .. host .. " from Redis: " .. (key_err or "N/A"))
2525
return nil
2626
end

ceryx/tests/client/adapters.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ def init_poolmanager(
1515
self.poolmanager = CeryxTestsPoolManager(
1616
num_pools=connections, maxsize=maxsize, block=block, strict=True,
1717
**pool_kwargs,
18-
)
18+
)

ceryx/tests/test_certificates.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,14 @@ def test_custom_certificate(self):
1717
self.redis.hset(self.redis_settings_key, "key_path", key_path)
1818

1919
self.client.get(f"https://{self.host}/", verify=certificate_path)
20+
21+
def test_fallback_certificate(self):
22+
"""
23+
Ensure that Ceryx uses the fallback certificate if a route gets accessed
24+
via HTTPS with no configured certificate or automatic Let's Encrypt
25+
certificates enabled.
26+
"""
27+
try:
28+
response = self.client.get(f"https://ghost.ceryx.test/", verify="/etc/ceryx/ssl/default.crt")
29+
except Exception as e:
30+
assert "sni-support-required-for-valid-ssl" in str(e)

0 commit comments

Comments
 (0)