Menü der Dokumentation

Aufrufen einer Schnittstelle mit eigener Certification Authority in einem Skript

Auf vielen On-Premises-Umgebungen existiert eine eigene Certification Authority (CA) für die Signierung von Serverzertifikaten. Oftmals sind diese CAs nicht von einer vertrauenswürdigen Stelle unterzeichnet, sodass die NodeJS-Ausführungsumgebung diesen Zertifikaten nicht vertraut. Dieser Umstand führt dazu, dass aus der Scripting-App heraus keine REST-Abfragen in Richtung dieser Systeme gesendet werden können.

Für die Ausführung von REST-Abfragen müssen Sie den öffentlichen Teil des CA-Zertifikates im PEM-Format importieren. Da die Zertifikate oftmals bereits im Zertifikatsspeicher von Windows gespeichert sind, können Sie den öffentlichen Teil des Zertifikats aus dem Zertifikatsspeicher exportieren.

Anmerkung

Das Zertifikat muss im PEM-Format sein. Exportieren Sie das Zertifikat mit dem Format "Base-64-codiert X509" oder konvertieren Sie das Zertifikat per openSSL. Anschließend können Sie die Datei bzw. den Inhalt der Datei als String im Skript verwenden.

Sie haben zwei Optionen, um selbstsignierte Zertifikate einzubinden:

Option 1 

In der NodeJS-Ausführungsumgebung können Sie global eigene Zertifikate einbinden. Verwenden Sie die Systemumgebungsvariable NODE_EXTRA_CA_CERTS=<Pfad zur PEM-Datei> und starten Sie d.velop process manager neu.

Option 2 

Fügen Sie Ihrem Skript die Abhängigkeit undici hinzu. Anschließend können Sie das Zertifikat von der Festplatte laden. Alternativ können Sie den Zertifikatsstring im Skript eintragen und dem Agent-Objekt als CA hinzufügen:

//Load undici agent and get dispatch function setter
const { Agent, setGlobalDispatcher } = require('undici')
module.exports = async (req, res) => {
        //Read cert file from filesystem
    const fs = require('fs');
    const certString = fs.readFileSync("C:\\certs\\test.pem", 'utf8')
        //Create a new agent using the loaded cert string as ca
    const agent = new Agent({
    connect: {
        ca:  certString
     }
    })
        //Set global dispatcher function
    setGlobalDispatcher(agent)
        //All regular fetch calls will now use the new agent
    const response = await fetch("https://my.secured.host/scripting", {
        // Adding method type
        method: "GET",
        // Adding headers to the request
        headers: {
            "Accept": "application/json"
        },
    })
    if(!response.ok) {
        console.log("Response was not ok")
    }
    const result = await response.json();
    console.log("Response from fetch", result)
    res.status(200).set("Content-Type", "text/plain").send(result);
}