-
-
Notifications
You must be signed in to change notification settings - Fork 12
Sicherer Zugriff über TLS
CCU-Jack ermöglicht einen verschlüsselten Zugriff über HTTPS, sodass auch über unsichere Netzwerke (z.B. Internet) Daten sicher ausgetauscht werden könnan. Über den Port 2122 (änderbar mit der Konfigurationsoption HTTP.PortTLS
) kann eine HTTPS-Verbindung aufgebaut werden. Analog gilt dies auch für MQTT-Verbindungen. Die dafür benötigten Zertifikate können vorgegeben werden oder werden beim ersten Start vom CCU-Jack automatisch generiert. Dies kann mit der Konfigurationsoption Certificates.AutoGenerate
eingestellt werden.
Benötigte Zertifikatsdateien für den Server (vorhanden oder auto-generiert):
Dateiname | Konfigurationsoption | Funktion |
---|---|---|
svrcert.pem | Certificates.ServerCertFile |
Zertifikat des Servers |
svrcert.key | Certificates.ServerKeyFile |
Privater Schlüssel des Servers (Dieser ist geheim zu halten.) |
Falls die Zertifikatsdateien automatisch generiert werden sollen, so sind folgende Konfigurationsoptionen zu setzen. Die Gültigkeit ist auf 10 Jahre eingestellt:
Dateiname | Konfigurationsoption | Funktion |
---|---|---|
cacert.pem | Certificates.CACertFile |
Zertifikat der Zertifizierungsstelle (CA) |
cacert.key | Certificates.CACertFile |
Privater Schlüssel der Zertifizierungsstelle (Dieser ist geheim zu halten.) |
svrcert.pem | Certificates.ServerCertFile |
Zertifikat des Servers |
svrcert.key | Certificates.ServerKeyFile |
Privater Schlüssel des Servers (Dieser geheim zu halten.) |
Für den sicheren Zugriff muss lediglich das generierte Zertifikat der Zertifizierungsstelle (cacert.pem
) den HTTPS-Clients über einen sicheren Kanal bekannt gemacht werden. Das Zertifikat kann z.B. im Betriebssystem oder im Web-Browser installiert werden. Die privaten Schlüssel dürfen nie verteilt werden.
Über verschiedene Programmiersprachen kann dann verschlüsselt zugegriffen werden.
curl --cacert path/to/cacert.pem https://hostname:2122
import requests
r = requests.get("https://hostname:2122", verify='path/to/cacert.pem')
print(r.status_code)
caCert, err := ioutil.ReadFile("path/to/cacert.pem")
if err != nil {
log.Fatal(err)
}
caCerts := x509.NewCertPool()
ok := caCerts.AppendCertsFromPEM(caCert)
if !ok {
log.Fatal("Failed to parse certificate")
}
con, err := tls.Dial("tcp", "hostname:2122", &tls.Config{RootCAs: caCerts})
if err != nil {
log.Fatal(err)
}
defer con.Close()
var fs = require('fs');
var https = require('https');
var get = https.request({
path: '/', hostname: 'hostname', port: 2122,
ca: fs.readFileSync('path/to/cacert.pem'),
agent: false,
rejectUnauthorized: true,
}, function(response) {
response.on('data', (d) => {
process.stdout.write(d);
});
});
get.on('error', function(e) {
console.error(e)
});
get.end();
Autor dieses Handbuchs ist Mathias Dzionsko. Dieses Handbuch steht unter folgender Lizenz:
Creative Commons Namensnennung - Keine Bearbeitungen 4.0 International Lizenz