1

学校の課題では、銀行からの安全なメールを送信する必要があります (私たちは銀行です)。これらの電子メールを保護するために、PHPMailer を使用しています。PHPMailer には、証明書を使用して電子メールに署名する Sign($cert_filename, $key_filename, $key_pass) メソッドが含まれています。これにより、電子メールが「安全」になり、顧客は電子メールを送信したのが銀行であることを本当に知ることができると思います. SMTPを使用して独自のドメインでメールを送信しています。

証明書を取得するために、この Web サイトで証明書を作成し、ブラウザにインストールしました。

問題は、その証明書を使用して、PHP スクリプトと PHPMailer を使用して送信する電子メールに署名するにはどうすればよいかということです。ブラウザー (FF) から証明書をエクスポートした結果、.p12 ファイルが作成されましたが、.p12 ファイルは探しているものではないと思います。

どんな助けでも大歓迎です。

4

2 に答える 2

3

class.phpmailer.php ファイルでデータを変更します。

public   $sign_cert_file = ’’; 
public   $sign_key_file  = ’’; 
public   $sign_key_pass  = ’’; 

表示される場所よりも:

if (@openssl_pkcs7_sign($file, $signed, "file://".$this->sign_cert_file, array("file://".$this->sign_key_file, $this->sign_key_pass), null)) {

次のように変更します。

if (@openssl_pkcs7_sign($file, $signed, file_get_contents($this->sign_cert_file), array(file_get_contents($this->sign_key_file), $this->sign_key_pass), null)){

これは、ファイル インクルージョン file:// ではなく、オブジェクト $this->sign_key_file を介して取得したことを意味します。

一時名を変更するよりも:

$file = tempnam(’’, ’mail’);
...
$signed = tempnam("", "signed");

に:

$file = tempnam(’./tmp/’, ’mail’);
...
$signed = tempnam("./tmp/", "signed");

これは、tmp ディレクトリ サーバーで を使用していることを意味します。

次に、データの証明書ファイルを送信および配置する方法の例を示します。

require("class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsMail();

$mail->AddAddress("email@example.com");
$mail->Subject = "Test 1";
$mail->Body = "Test 1 of PHPMailer.";

// CUSTOMISED SIGN EMAIL : START
$mail->sign_cert_file="/xxx/key.pem";
$mail->sign_key_file="/xxx/key.pem";
$mail->sign_key_pass="yyy";
// CUSTOMISED SIGN EMAIL : END

$mail->Send(); // Send encrypted email!
于 2012-10-14T21:21:37.277 に答える
1

sign()関数を使用して署名付き証明書を追加できるようになりました。

require_once 'PHPMailerAutoload.php';
$mail = new PHPMailer();
$mail->AddAddress("email@example.com");
$mail->Subject = "Test";
$mail->Body = "Test";

$mail->sign(
    'cert.crt',
    'cert.key',
    'password',//required even if empty
    'certchain.pem'
);

if( !$mail->Send() ){
    echo $mail->ErrorInfo;
}

https://github.com/PHPMailer/PHPMailer/blob/master/examples/smime_signed_mail.phps#L77

于 2019-06-07T18:29:12.143 に答える