Hi Bryan,

On Thu, Sep 19, 2013 at 9:29 PM, Bryan C. Geraghty <br...@ravensight.org>wrote:

> -----Original Message-----
> From: tjerk.meest...@gmail.com [mailto:tjerk.meest...@gmail.com] On Behalf
> Of Tjerk Anne Meesters
> Sent: Thursday, September 19, 2013 4:01 AM
>
> > My point is that you need a reasonably up-to-date certs bundle to enable
> verification by default.
>
> Actually, you don't. There is no reason why certificate validation cannot
> be
> enabled by default without a CA bundle. Yes, verifications will fail by
> default but this is no different than the cases where someone has an
> oddball
> provider or self-signed certificates; they have to manually add the cert
> for
> verification to pass.
>

For the most part, API libraries I've seen handle this scenario by shipping
a certificate bundle with their code. The verification setting obviously
does not apply to them, because they're handling it themselves or they
don't use streams at all.

However, I can imagine the bulk of developers will want the
`file_get_contents('https://example.org')` to *just work* and flipping that
switch between versions will likely upset a horde of them.


>
> Additionally, given the current certificate climate, I wouldn't trust
> anything signed by the global CAs. If you're concerned about security, you
> should be validating the certificate fingerprint and not trusting CAs.
>

That feature is currently not very well supported in streams. However, I'm
working on a proposal to introduce [openssl_x509_digest()] which would make
this possible:

$context = stream_context_create([
    'ssl' => [
        'capture_peer_cert' => true,
]]);

$f = fopen($url, 'rt', false, $context);

$options = stream_context_get_options($context);

openssl_x509_digest($options['ssl']['peer_certificate'], $result);
echo "SHA1 fingerprint = ", bin2hex($result), "\n";

https://github.com/datibbaw/php-src/commit/b8f9a20286c6d88c11e81967df42d118bdba2f02




>
> Bryan
>
>


-- 
--
Tjerk

Reply via email to