1. Home
  2. Техническое
  3. Напоминание о том, как использовать ID карту в ваших веб-приложениях

Напоминание о том, как использовать ID карту в ваших веб-приложениях

Как вообще происходит проверка подлинности по ID-карте?

Аутентификация по ID-карте Эстонии настраивается на веб-сервере так, чтобы быть невидимой для клиентских приложений. В основном это происходит следующим образом:

1) Веб-сервер запрашивает сертификат у посетителя (т. е. у его браузера).
(Как браузер посетителя запрашивает его у посетителя, зависит от конкретного браузера)

2) После получения сертификата от браузера клиента веб-сервер проверяет следующее:

  • сертификат ДОЛЖЕН БЫТЬ подписан со стороны AS Sertifitseerimiskeskus
  • сертификат НЕ ДОЛЖЕН БЫТЬ включен в списки отзыва сертификатов, выданных со стороны AS Sertifitseerimiskeskus
    Только после успешного выполнения этих двух условий содержимое защищенной директории будет отображено, а PHP-приложение запущено на веб-сервере.

Что такое списки отзыва и как они обновляются?

Списки отзыва – это файлы, содержащие все сертификаты эстонских ID-карт, действие которых было приостановлено в тот или иной момент времени.

По данным Центра сертификации, списки отзыва могут обновляться в течение до 12 часов, поэтому может возникнуть ситуация, когда сертификат уже приостановлен, но еще не отражается в списке отзыва. По этой причине для приложений, требующих повышенной безопасности, всегда рекомендуется дополнительно использовать запрос пароля от посетителя и т. д.

Новые списки отзыва загружаются на виртуальные серверы Zone каждый час.

Что нужно для использования ID-карты в веб-приложениях?

Внимание!

Для использования ID-карты в своих приложениях необходим выделенный IP-адрес. Выделенный IP-адрес доступен в пакете услуг PRO. Для активаций выделенного IP-адреса просим обратится в нашу службу поддержки.

Добавленный IP-адрес должен быть связан с соответствующим хостом из панели управления сервером (корневой домен виртуального сервера или один из его поддоменов).

Затем необходимо добавить файл .htaccess, содержащий 2 строки, в каталог, доступ к которому посетитель может получить только при наличии подлинного удостоверения личности. В .htaccess должны быть добавлены следующие строки:

SSLVerifyClient require
SSLVerifyDepth 2

Например, чтобы добавить поддержку ID-карт в https://companyname.ee/myapplication/, вам нужно создать файл /secure/htdocs/myapplication/.htaccess и включить в него приведенные выше строки.

Как получить информацию об ID-карте посетителя от PHP?

Предполагаем, что поддержка ID-карты работает в нужном каталоге. Теперь необходимо получить информацию об ID-карте посетителя в приложений. Эта информация передается с веб-сервера в PHP через переменные среды.

В PHP есть функция getenv() для чтения переменных среды.

Для идентификации клиента существует переменная SSL_CLIENT_S_DN. Оно содержит имя, фамилию и ID посетителя.

Вы можете легко увидеть все переменные с помощью phpinfo(). Переменные, связанные с сертификатом ID-карты, находятся в разделе Apache Environment с префиксом SSL_CLIENT_*.

Любые символы, не относящиеся к стандарту ASCII, в имени владельца сертификата заменяются на кодированные символы: \\\x01`\\\x00 итд.

Личные данные в сертификате закодированы в формате UCS-2/UTF-16. Это позволяет использовать в имени человека символы, не присутствующие в таблице ASCII, например такие как ‘š’ ja ‘ž’. В результате все специальные символы заменяются двумя символами \\ и кодом символа в системе HEX.

Данные, закодированные таким образом, можно преобразовать в широко используемую кодировку UTF-8 с помощью следующего скрипта:

<?php
function certstr2utf8 ($str) {
$str = preg_replace_callback("/\\\\x([0-9ABCDEF]{1,2})/", function ($s) { return chr(hexdec($s[1])); }, $str);

$result="";

$encoding=mb_detect_encoding($str,"ASCII, UCS2, UTF8");

if ($encoding=="ASCII") {

$result=mb_convert_encoding($str, "UTF-8", "ASCII");

} else {

if (substr_count($str,chr(0))>0) {
$result=mb_convert_encoding($str, "UTF-8", "UCS2");
} else {
$result=$str;
}
}

return $result;
}

header ("Content-Type: text/html; charset=UTF-8");

$s = getenv ('SSL_CLIENT_S_DN');
$l = preg_split ('|/|', $s, -1, PREG_SPLIT_NO_EMPTY);

foreach ($l as $e) {
list ($n, $v) = explode ('=', $e, 2);
echo $n . '=' . certstr2utf8 ($v) . "<br />";
}
?>
Updated on 30. Apr 2024

Was this article helpful?

Related Articles