1 votes

SMTP avec STARTTLS ne fonctionne pas correctement (postfix)

Quand j'utilise PHPMailer pour envoyer du courrier via Postfix, j'utilise la configuration par défaut avec ces modifications :

# SMTP from other servers to yours
smtpd_tls_key_file = /etc/postfix/myletsencryptcert.key
smtpd_tls_cert_file = /etc/postfix/myletsencryptcert.crt
smtpd_tls_CAfile = /etc/postfix/myletsencryptcert.crt
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
smtpd_tls_protocols=!SSLv2,!SSLv3
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_database =
    btree:/var/lib/postfix/smtpd_tls_session_cache

Lorsque j'utilise cette configuration, et que je lance PHPMailer il est dit que la connexion a échoué, juste après avoir fait le STARTTLS commande. Mon PHPMailer config est

$mail = new PHPMailer(true);

    $mail->isSMTP();
    $mail->Host       = 'localhost';
    //$mail->SMTPAuth   = true;
    $mail->Username   = 'noreply@example.com';
    //$mail->Password   = 'passwordwhichissecretobviously';
    $mail->SMTPSecure = 'tls';
    $mail->Port       = 25;
    $mail->SMTPAutoTLS = false;

    $mail->setFrom("noreply@example.com", "Some person");
    $mail->addAddress("sperson@example.com");

    $mail->isHTML(true);
    $mail->Subject = "Web Development";
    $mail->Body    = "
Some random HTML message
";
    $mail->AltBody = "some normal message without HTML";
    $mail->XMailer    = "0"; 
    $mail->CharSet = 'UTF-8';
    $mail->Encoding = 'base64';

    $mail->DKIM_domain = 'example.com';
    $mail->DKIM_private = '/right/path/to/dkimkey/which/works/properly/dkim.key';
    $mail->DKIM_selector = 'default';
    $mail->DKIM_passphrase = '';
    $mail->DKIM_identity = $mail->From;
    $mail->DKIM_copyHeaderFields = false;

Et même si j'utilise telnet et que je le fais, j'obtiens après l'exécution de la commande STARTTLS.

J'ai découvert qu'en utilisant ceci, je peux envoyer le courrier avec PHPMailer :

$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer_name' => false
    )
);

Mais je pense que ce serait un problème de sécurité. Comment faire autrement pour que cela fonctionne ?

0 votes

@anx, vous voulez dire que je dois enlever les guillemets ?

2 votes

@anx, vous voulez dire utiliser le vrai nom de domaine que le cert ssl a ? Wow, ça a réglé le problème lol. Je suis tellement confus maintenant. S'il vous plaît, postez-le comme réponse. Oh mon dieu, je viens de perdre deux jours entiers sur ce sujet, avec un mal de tête. Je mérite les votes négatifs que je vais recevoir pour cette question.

0 votes

Mais cela ne fonctionne toujours pas avec telnet.

2voto

anx Points 5996

La vérification du nom de l'homologue ne fonctionne que si le nom de l'homologue est connu.

Faites-le connaître, en configurant le nom du serveur en tant que Host .

// this is a name not mentioned in the cert
$mail->Host       = 'localhost';
// better: a full domain name
$mail->Host       = 'mx8.mydomain.example';

Vous (devriez) avoir un certificat pour le nom de votre serveur de messagerie - en comparant ce nom dans le certificat à localhost n'est pas suffisant pour déterminer si le certificat est approprié. Tout client de messagerie ou outil de test qui souhaite vérifier votre certificat doit connaître le nom auquel il doit se comparer.

Pique-nique : Votre valeur SMTPSecure contient la valeur de la variable const (la chaîne de caractères "tls" ) - utiliser le nom ( PHPMailer::ENCRYPTION_STARTTLS ) parce que la valeur elle-même n'explique pas ce qu'elle signifie sans consulter la documentation.

À propos de telnet : En utilisant un outil de test simple comme telnet est un bon choix pour résoudre les problèmes, mais vous ne pouvez pas utiliser la fonction telnet ici - ce programme n'est (généralement) pas conscient du cryptage TLS. J'aime utiliser un utilitaire inclus dans openssl à la place :

openssl s_client -connect hostname:25 -starttls smtp

(oui, il peut même épeler STARTTLS pour vous et affiche les paramètres de connexion d'une manière assez lisible pour l'homme)

0 votes

Aussi, j'ai réalisé que le truc du telnet ne fonctionne pas si j'utilise telnet chicjrajeevalochana.com 25 puis lancez la commande starttls, elle s'arrête juste après avoir entré la commande MAIL FROM <mymail@chicjrajeevalochana.com>

0 votes

Naturellement : telnet ne peut pas gérer TLS.

0 votes

@EsaJokinen oh ok. C'est peut-être ça le problème.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X