Zunächst einmal, wenn Sie Ihr Zertifikat von NetworkFX erhalten haben, haben Sie wahrscheinlich standardmäßig das SHA256-Zertifikat erhalten, das TLS 1.2 ist. In diesem Fall müssen Sie sicherstellen, dass die von PHP verwendete OpenSSL-Instanz mindestens Version 1.0.1 oder höher ist. Vorherige Versionen unterstützen kein TLS 1.2 und können die Zertifikate nicht verarbeiten. Um die von PHP verwendete OpenSSL-Version zu überprüfen, können Sie ausführen und dann nach dem String "SSL-Version" suchen. Wenn Sie unter 1.0.1 liegen, müssen Sie definitiv das SHA1-Zertifikat von NetworkFX erhalten oder Ihre OpenSSL-Instanz aktualisieren. Die gute Nachricht ist, dass derzeit nur TLS 1.0 für die Zertifizierung 2.0a erforderlich ist, sodass ein Upgrade nicht erforderlich ist.
Zweitens, wenn Sie Ihre Zertifikate von NetworkFX erhalten haben, sind sie wahrscheinlich im DER-Format. PHP-cURL verwendet standardmäßig PEM, aber Sie können das Format technisch gesehen in DER ändern
curl_setopt($curl, CURLOPT_SSLCERTTYPE, 'DER');
curl_setopt($curl, CURLOPT_SSLKEYTYPE, 'DER');
Die erste Option für CURLOPT_SSLCERTTYPE (den öffentlichen Schlüssel) funktionierte gut mit DER. Aber beim privaten Schlüssel erhielt ich die Meldung "private Schlüsseldatei konnte nicht gesetzt werden", als ich das DER-Format verwendete. Daher musste ich den privaten Schlüssel mit openssl ins PEM-Format konvertieren (das Folgende wandelt ein RSA-Zertifikat von DER in PEM um. Wenn Sie ein ECC-Zertifikat haben, sollten Sie den Befehl relativ einfach online finden können):
openssl rsa -inform der -in zertifikat.der -out zertifikat.pem
Nachdem das erledigt ist, sollten Sie in der Lage sein, folgendermaßen an den VTN zu posten, indem Sie cURL in PHP verwenden:
// z. B. 'https://localhost:8080/OpenADR2/Simple/EiEvent'
$curl = curl_init($vtnBaseURL.'/OpenADR2/Simple'.$path);
curl_setopt($curl, CURLOPT_POSTFIELDS, $xml); //-d
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Host: my.host.com',
'Content-Type: application/xml; charset=utf-8',
"Content-Length: ".strlen($xml)
) ); //-H
curl_setopt($curl, CURLOPT_VERBOSE, false); //-v
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//SICHERHEIT
if( strpos($vtnBaseURL,'https') !== false ) {
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //sollte in der Produktion true sein
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); //sollte in der Produktion 2 sein
curl_setopt($curl, CURLOPT_SSL_CIPHER_LIST, 'TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256:TLS_RSA_WITH_AES_128_CBC_SHA256:TLS_RSA_WITH_AES_128_CBC_SHA');
curl_setopt($curl, CURLOPT_SSLCERT, 'pfad/zum/zert.pem');
curl_setopt($curl, CURLOPT_SSLKEY, 'pfad/zum/privatschlüssel.pem');
}
$response = curl_exec($curl);
$error = curl_error($curl);
curl_close($curl);