Peter Silje
Neues Mitglied
Das Signieren mit Swiftmailer und der Funktion f_send_mail (s.u.) ergibt eine Fehlermeldung, die ich nicht verstehe.
Unklar ist auch, welche Dateien und Pfade in den Befehl
$smimeSigner->setSignCertificate( $pk ,$pk );
gehören.
Ich habe vom Zertifizierer nur eine Datei bekommen (wise.crt), die hier zu Testzwecken mit fopen erfolgreich ausgelesen wird (crt und pem ergeben keinen Unterschied (durch Umbenennen die Endung geändert)),
OpenSSL ist auf dem Webserver (1blu) installiert (geprüft über phpinfo).
Aufgefallen ist mir noch, dass in der vorletzten Zeile der Fehlermeldung beim Namen von myApp_b das b fehlt (myApp_).
Hat jemand eine Idee? Vielen Dank für hilfreiche Hinweise.
ergibt folgenden Ausdruck :
pk: -----BEGIN CERTIFICATE----- MIIFCDCCA/CgAwIBAgIKFnBlsgAAAAAumTANBgkqhkiG9w0BAQUFADCBkjELMAkG A1UEB
Dirname: ../includes/zertifikate
mit folgender Fehlermeldung:
Warning: openssl_pkcs7_sign() [function.openssl-pkcs7-sign]: error getting private key in /hp/bh/ab/pn/www/myApp_b/includes/swift_mail/lib/classes/Swift/Signers/SMimeSigner.php on line 290
Fatal error: Uncaught exception 'Swift_IoException' with message 'Failed to sign S/Mime message. Error: "error:0906D06CEM routinesEM_read_bio:no start line".' in /hp/bh/ab/pn/www/myApp_b/includes/swift_mail/lib/classes/Swift/Signers/SMimeSigner.php:291 Stack trace: #0 /hp/bh/ab/pn/www/myApp_b/includes/swift_mail/lib/classes/Swift/Signers/SMimeSigner.php(253): Swift_Signers_SMimeSigner->messageStreamToSignedByteStream(Object(Swift_ByteStream_TemporaryFileByteStream), Object(Swift_ByteStream_TemporaryFileByteStream)) #1 /hp/bh/ab/pn/www/myApp_b/includes/swift_mail/lib/classes/Swift/Signers/SMimeSigner.php(213): Swift_Signers_SMimeSigner->toSMimeByteStream(Object(Swift_ByteStream_TemporaryFileByteStream), Object(Swift_Message)) #2 /hp/bh/ab/pn/www/myApp_b/includes/swift_mail/lib/classes/Swift/Message.php(197): Swift_Signers_SMimeSigner->signMessage(Object(Swift_Message)) #3 /hp/bh/ab/pn/www/myApp_b/includes/swift_mail/lib/classes/Swift/Message.php(153): Swift_Message->doSign() #4 /hp/bh/ab/pn/www/myApp_ in /hp/bh/ab/pn/www/myApp_b/includes/swift_mail/lib/classes/Swift/Signers/SMimeSigner.php on line 291
Unklar ist auch, welche Dateien und Pfade in den Befehl
$smimeSigner->setSignCertificate( $pk ,$pk );
gehören.
Ich habe vom Zertifizierer nur eine Datei bekommen (wise.crt), die hier zu Testzwecken mit fopen erfolgreich ausgelesen wird (crt und pem ergeben keinen Unterschied (durch Umbenennen die Endung geändert)),
OpenSSL ist auf dem Webserver (1blu) installiert (geprüft über phpinfo).
Aufgefallen ist mir noch, dass in der vorletzten Zeile der Fehlermeldung beim Namen von myApp_b das b fehlt (myApp_).
Hat jemand eine Idee? Vielen Dank für hilfreiche Hinweise.
PHP:
<?php
#~~~~~~~~~~ swift_mail ~~~~~~~~~~~--http://swiftmailer.org/
#~~~~~~~~~~~http://aktuell.de.selfhtml.org/artikel/php/form-mail-advanced/index.htm
function f_send_mail($absenderadresse, $betreff, $zieladresse, $body) {
// zum Testen------------------------------------------
error_reporting(E_ALL);
ini_set ('display_errors', 'On');
//--------------------------------------------------------
require_once "swift_mail/lib/swift_required.php"; // Swift initialisieren
$absendername = "";
if ($_SERVER['REQUEST_METHOD'] === "POST") {
#$message = Swift_Message::newInstance();//Normalfall: ok
$message = Swift_SignedMessage::newInstance();
$mailer = Swift_Mailer::newInstance(Swift_MailTransport::newInstance());
$smimeSigner = Swift_Signers_SMimeSigner::newInstance();
//-----------------------------------------------------------
#$pk="http://www.xxx.de/myApp_b/includes/zertifikate/wise.crt";
#$pk="/hp/bh/ab/pn/www/myApp_b/includes/zertifikate/wise.crt";
$pk="../includes/zertifikate/wise.crt";
// Signierung mit wise-Zertifikat für privat-Nutzer
$smimeSigner->setSignCertificate( $pk ,$pk );
#------------------------------------------------
$fp=fopen($pk,"r");
echo "<br>pk: ".fread($fp,100);
echo "<br>Dirname: dirname ($pk)<br>";
fclose($fp);
#------------------------------------------------
$message
->setFrom(array($absenderadresse => $absendername))
->setTo(array($zieladresse)) // alternativ existiert setCc() und setBcc()
->setSubject($betreff);
$message->setBody($body, 'text/plain');
$message->attachSigner($smimeSigner);//zum Signieren
$result = $mailer->send($message);
return $result;
} //if post ende
header("Content-type: text/html; charset=utf-8");
}
// ende f_send_mail
?>
ergibt folgenden Ausdruck :
pk: -----BEGIN CERTIFICATE----- MIIFCDCCA/CgAwIBAgIKFnBlsgAAAAAumTANBgkqhkiG9w0BAQUFADCBkjELMAkG A1UEB
Dirname: ../includes/zertifikate
mit folgender Fehlermeldung:
Warning: openssl_pkcs7_sign() [function.openssl-pkcs7-sign]: error getting private key in /hp/bh/ab/pn/www/myApp_b/includes/swift_mail/lib/classes/Swift/Signers/SMimeSigner.php on line 290
Fatal error: Uncaught exception 'Swift_IoException' with message 'Failed to sign S/Mime message. Error: "error:0906D06CEM routinesEM_read_bio:no start line".' in /hp/bh/ab/pn/www/myApp_b/includes/swift_mail/lib/classes/Swift/Signers/SMimeSigner.php:291 Stack trace: #0 /hp/bh/ab/pn/www/myApp_b/includes/swift_mail/lib/classes/Swift/Signers/SMimeSigner.php(253): Swift_Signers_SMimeSigner->messageStreamToSignedByteStream(Object(Swift_ByteStream_TemporaryFileByteStream), Object(Swift_ByteStream_TemporaryFileByteStream)) #1 /hp/bh/ab/pn/www/myApp_b/includes/swift_mail/lib/classes/Swift/Signers/SMimeSigner.php(213): Swift_Signers_SMimeSigner->toSMimeByteStream(Object(Swift_ByteStream_TemporaryFileByteStream), Object(Swift_Message)) #2 /hp/bh/ab/pn/www/myApp_b/includes/swift_mail/lib/classes/Swift/Message.php(197): Swift_Signers_SMimeSigner->signMessage(Object(Swift_Message)) #3 /hp/bh/ab/pn/www/myApp_b/includes/swift_mail/lib/classes/Swift/Message.php(153): Swift_Message->doSign() #4 /hp/bh/ab/pn/www/myApp_ in /hp/bh/ab/pn/www/myApp_b/includes/swift_mail/lib/classes/Swift/Signers/SMimeSigner.php on line 291