Versucht man sich nun via JenkinsAPI (siehe Codeausschnitt) mit den Server jenkins-master zu verbinden, so bekommt man folgende Fehlermeldung.
from jenkinsapi.jenkins import Jenkins jenkins = Jenkins('https://jenkins-master:8080')
Meldung/Fehler:
SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Die Meldung wird durch den verwendeten SSL Layer erzeugt, welcher nicht in der Lage war das verwendete Zertifikat zu verifizieren. Es gibt nun verschiedene Möglichkeiten um dem Problem zu begegnen:
- offizielle SSL Zertifikate erwerben
- selbst signierte Zertifikate als vertrauenswürdige Zertifikate im SSL Layer installieren
- Überprüfung des Zertifikates für diese Verbindung deaktivieren.
Nach einer Analyse der JenkinsAPI und der darunterliegenden requests API bietet es sich an die SSL Zertifikat Überprüfung über eine eigene Requester Klasse zu deaktivieren. Dies kann man wie folgt erreichen.
from jenkinsapi.jenkins import Jenkins from jenkinsapi.utils.requester import Requester class SSLRequester(Requester): def __init__(self, username=None, password=None): super(SSLRequester, self).__init__(username, password) def get_request_dict(self, url, params, data, headers): requestKWargs = super(SSLRequester, self).get_request_dict(url, params, data, headers) requestKWargs['verify'] = False return requestKWargs jenkins = Jenkins('https://jenkins-master:8080', requester=SSLRequester())
Die Klasse SSLRequester überschreibt hierbei die in der Klasse Requester definierte get_request_dict Methode in der Art und Weise das zusätzlich zu den url, params, data, headers Parametern noch die Option verify=false als die darunterliegende requests Klasse/Methode übergeben wird. Nun wird die Jenkins Instanz ohne Fehlermeldungen über eine "sichere" SSL Verbindung erzeugt. Über dieselbe Art und Weise, mit Hilfe der SSLRequester Klasse kann man auch einen Pfad zu einer sogenannten "trusted certificate base" (Vertrauenswürdige Basiszertifikate) übergeben um dann mit Hilfe dieser Zertifikate seine selbst signierten Zertifikate zu verfifizieren.
Keine Kommentare:
Kommentar posten