Android Studio: обработка сайтов с сертификатом Минкомсвязи в webview компоненте приложения

При попытке отобразить в webview компоненте сайт с сертификатом выданным Минкомсвязи, возникает ошибка проверки SSL соединения, т.к. этому корневому сертификату система не «доверяет». В частности ошибка возникает в настоящий момент при процессинге платежей банка Тинькофф и Сбербанк. В настоящий момент существует путь заставить компонент webview корректно проходить проверку сертификата на таких сайтах. Для этого в файл манифеста приложения необходимо добавить строчку вида:

<application
        android:networkSecurityConfig="@xml/network_security_config"
...

А так-же в папке ресурсов добавить папку xml, и разместить там файл network_security_config.xml:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">ru</domain>
        <trust-anchors>
            <certificates src="@raw/root"/>
            <certificates src="@raw/sub"/>
            <certificates src="system"/>
            <certificates src="user"/>
        </trust-anchors>
    </domain-config>
</network-security-config>

Сертификаты Минкомсвязи, соответственно нужно положить в android/src/res/raw. Скачать их можно тут

В результате проведенных манипуляций, все сайты в зоне ru, будут сначала проверяться при помощи сертификата Минкомсвязи, а в случае не успеха — встроенными сертификатами системы и установленными сертификатами пользователя.

PHP: получить публичный ключ удаленного сервера

Задача: получить публичный ключ https ресурса

Решение:

<?php
$opt = [
  "capture_peer_cert" => true,
    "capture_peer_cert_chain" => true
    ];
    $a = stream_context_create(["ssl"=>$opt]);
    $b = stream_socket_client("tls://xn--90acbu5aj5f.xn--p1ai:443", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $a);
    $cont = stream_context_get_params($b);
    $key = openssl_pkey_get_public($cont["options"]["ssl"]["peer_certificate"]);
    $c = openssl_pkey_get_details($key);
    var_dump($c["key"]);

PHP: Использование CURL с сертифкатом

Задача: Некий удаленный ресурс проверяет сертификат пользователя, при попытке получить с него данные. В наличии только стандартные сертификаты выданные LetEncrypt.

Решение:

Сертификаты необходимо сконвертировать. В наличии:

  • sert.crt — сертификат домена в PEM формате
  • sert.key — приватный ключ PEM формате

Конвертируем используя промежуточную конвертацию в формат p12:

openssl pkcs12 -export -in sert.crt -inkey sert.key -out sert.p12
openssl pkcs12 -in sert.p12 -nodes -out result.pem

По итогу получили файл result.pem. Далее его и будем использовать при работе с curl:

$ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, "https://некий ресурс");    
                curl_setopt($ch, CURLOPT_SSLCERT, WUO_ROOT."result.pem" );
                curl_setopt($ch,CURLOPT_SSLCERTTYPE,"PEM");
                curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, True);
                curl_setopt($ch, CURLOPT_POST, True);
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                $post=http_build_query($post, '', '&');
                curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
                curl_setopt($ch, CURLOPT_VERBOSE, true);
                $result = curl_exec($ch);
                curl_close($ch);   

websocket сервер ratchet c SSL

Почемуто большинство примеров создания websocket сервера с использованием ratchet приведены без использования SSL.  И у всех как я почитаю пляски с буном потом с проксированием через apache или ngnix. Но ведь он умеет и без этого!

Вот примерно как это оформляется:

А вот пример класса MessageService:




Включаем поддержку SSL в Postfix, FreeBSD 10.x

Предыдущий пост (включение подписи DKIM) не помог избавиться от попадания в папку СПАМ на ящиках gmail, поэтому следующим этапом попробуем включение принудительного шифрования писем SSL на домене.

Сначала сделаем самоподписный сертификат:

Добавляем в Postfix поддержку SSL:

В файле /usr/local/etc/postfix/master.cf нужно добавить:

и перестартовать postfix




1 2