Skip to content

Commit dbd7747

Browse files
committed
feature #51450 [Mailer] [Smtp] Add DSN param peer_fingerprint for fingerprint verification (xdavidwu)
This PR was merged into the 6.4 branch. Discussion ---------- [Mailer] [Smtp] Add DSN param `peer_fingerprint` for fingerprint verification | Q | A | ------------- | --- | Branch? | 6.4 | Bug fix? | no | New feature? | yes | Deprecations? | no | Tickets | - | License | MIT | Doc PR | symfony/symfony-docs#18778 This allows a more secure TLS connection for SMTP on even self-signed certificates, by verifying certificate fingerprint. Commits ------- a9d8431 [Mailer][Smtp] Add DSN param `peer_fingerprint` for fingerprint verification
2 parents edd1cb4 + a9d8431 commit dbd7747

File tree

3 files changed

+31
-5
lines changed

3 files changed

+31
-5
lines changed

src/Symfony/Component/Mailer/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
CHANGELOG
22
=========
33

4+
6.4
5+
---
6+
7+
* Add DSN parameter `peer_fingerprint` to verify TLS certificate fingerprint
8+
49
6.3
510
---
611

src/Symfony/Component/Mailer/Tests/Transport/Smtp/EsmtpTransportFactoryTest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,23 @@ public static function createProvider(): iterable
109109
$transport,
110110
];
111111

112+
$transport = new EsmtpTransport('example.com', 465, true, null, $logger);
113+
/** @var SocketStream $stream */
114+
$stream = $transport->getStream();
115+
$streamOptions = $stream->getStreamOptions();
116+
$streamOptions['ssl']['peer_fingerprint'] = '6A1CF3B08D175A284C30BC10DE19162307C7286E';
117+
$stream->setStreamOptions($streamOptions);
118+
119+
yield [
120+
new Dsn('smtps', 'example.com', '', '', 465, ['peer_fingerprint' => '6A1CF3B08D175A284C30BC10DE19162307C7286E']),
121+
$transport,
122+
];
123+
124+
yield [
125+
Dsn::fromString('smtps://:@example.com?peer_fingerprint=6A1CF3B08D175A284C30BC10DE19162307C7286E'),
126+
$transport,
127+
];
128+
112129
$transport = new EsmtpTransport('example.com', 465, true, null, $logger);
113130
$transport->setLocalDomain('example.com');
114131

src/Symfony/Component/Mailer/Transport/Smtp/EsmtpTransportFactory.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,21 @@ public function create(Dsn $dsn): TransportInterface
2929

3030
$transport = new EsmtpTransport($host, $port, $tls, $this->dispatcher, $this->logger);
3131

32-
if ('' !== $dsn->getOption('verify_peer') && !filter_var($dsn->getOption('verify_peer', true), \FILTER_VALIDATE_BOOL)) {
33-
/** @var SocketStream $stream */
34-
$stream = $transport->getStream();
35-
$streamOptions = $stream->getStreamOptions();
32+
/** @var SocketStream $stream */
33+
$stream = $transport->getStream();
34+
$streamOptions = $stream->getStreamOptions();
3635

36+
if ('' !== $dsn->getOption('verify_peer') && !filter_var($dsn->getOption('verify_peer', true), \FILTER_VALIDATE_BOOL)) {
3737
$streamOptions['ssl']['verify_peer'] = false;
3838
$streamOptions['ssl']['verify_peer_name'] = false;
39+
}
3940

40-
$stream->setStreamOptions($streamOptions);
41+
if (null !== $peerFingerprint = $dsn->getOption('peer_fingerprint')) {
42+
$streamOptions['ssl']['peer_fingerprint'] = $peerFingerprint;
4143
}
4244

45+
$stream->setStreamOptions($streamOptions);
46+
4347
if ($user = $dsn->getUser()) {
4448
$transport->setUsername($user);
4549
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy