sphinx-build с -blinkcheck и пользовательским CA
У нас есть собственный центр сертификации, который мы используем для подписи SSL-сертификатов. В основном, это работает нормально, если ваша ОС (в нашем случае CentOS 7) регистрирует эти полномочия. Хранится здесь:
/etc/pki/ca-trust/source/anchors/company_ca.pem
Это позволяет Firefox/chrome доверять сертификатам SSL, которые были подписаны через него.
я использую sphinx-build -W -blinkcheck […]
чтобы убедиться, что ссылки в моем проекте Python по-прежнему действительны, так как ссылка гнилой отстой в документации. Это хорошо для всех внешних ссылок.
Тем не менее, при ссылке на нашу собственную SSL-версию богомола (трекер ошибок), я получаю
SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:579)'),)))
ошибка. Mantis, в нашей настройке, работает только по https.
Как мне сказать sphinx добавить авторитет всей компании?
Я обычно запускаю это через токсик
Форекс токсина, который управляет этим:
[testenv:docs]
basepython=python2.7
deps=-r{toxinidir}/requirements/requirements.txt
commands=./check_docs.bash
Скрипт bash:
#!/bin/bash
set -eux
sphinx-apidoc --force --separate --private --module-first -o docs src/ '*/*test*'
cd docs
pytest --maxfail=1 \
--tb=line \
-v \
--junitxml=junit_sphinx.xml \
--exitfirst \
--failed-first \
--full-trace \
-ra \
--capture=no \
check_sphinx.py
И сценарий питонов:
import subprocess
def test_linkcheck(tmpdir):
doctrees = tmpdir.join("doctrees")
htmldir = tmpdir.join("html")
subprocess.check_call([
"sphinx-build", "-W", "-blinkcheck", "-d",
str(doctrees), ".",
str(htmldir)
])
def test_build_docs(tmpdir):
doctrees = tmpdir.join("doctrees")
htmldir = tmpdir.join("html")
subprocess.check_call([
"sphinx-build", "-W", "-bhtml", "-d",
str(doctrees), ".",
str(htmldir)
])
1 ответ
Сфинкс использует requests
который использует certifi
- Спасибо Sraw, который любезно указал на это в комментарии. Вы можете изменить certifi.where()
включить свой собственный центр сертификации.
Поскольку вы можете запустить tox или пересоздать вашу виртуальную среду, делать это вручную утомительно и подвержено ошибкам. Приспособление делает это намного легче иметь дело с.
Сценарий Python изменяется следующим образом.
# -*- coding: utf-8 -*-
import subprocess
import certifi
import requests
import pytest
CA = '/etc/pki/ca-trust/source/anchors/company_ca.pem'
@pytest.fixture
def certificate_authority(scope="module"):
try:
# Checking connection to Mantis…
requests.get('https://mantisbt.example.com')
# Connection to Mantis OK, thus CA should work fine.
except requests.exceptions.SSLError:
# SSL Error. Adding custom certs to Certifi store…
cafile = certifi.where()
with open(CA, 'rb') as infile:
customca = infile.read()
with open(cafile, 'ab') as outfile:
outfile.write(customca)
# That might have worked.
def test_linkcheck(certificate_authority, tmpdir):
doctrees = tmpdir.join("doctrees")
htmldir = tmpdir.join("html")
subprocess.check_call([
"sphinx-build", "-W", "-blinkcheck", "-d",
str(doctrees), ".",
str(htmldir)
])
def test_build_docs(certificate_authority, tmpdir):
doctrees = tmpdir.join("doctrees")
htmldir = tmpdir.join("html")
subprocess.check_call([
"sphinx-build", "-W", "-bhtml", "-d",
str(doctrees), ".",
str(htmldir)
])