Добрый день!
В конце прошлого года мы приобрели:
1. Лицензия на право использования ПО "КриптоПро .NET" на одном сервере
2. Сертификат на годовую техническую поддержку ПО "КриптоПро .NET" на одном сервере
3. Лицензия на право использования СКЗИ "КриптоПро CSP" версии 4.0 на сервере
4. Сертификат на годовую техническую поддержку СКЗИ "КриптоПро CSP" на сервере
Сейчас настроили такую конфигурацию:
Сервер с ОС Windows 2016, где установлены КриптоПро .NET и КриптоПро CSP (ip 192.168.9.7).
Сервер с ОС CentOS, Birix, php (192.168.9.8), также установили библиотеку libphpcades.so,
Пытаемся подписать документ тестовым сертификатом Cryptopro. В качестве примера используем скрипт:
https://www.cryptopro.ru...e/cades_bes_sample.html, немного его изменив.
Скрипт создает документ, который необходимо подписать и отправить на проверку на прокси сервер
http://192.168.9.7:8000/Service
документ записан в переменную $html
<link href="/bitrix/js/crypto-pro/demopage.css" rel="stylesheet" type="text/css">
<script src="/bitrix/js/crypto-pro/es6-promise.js"></script>
<script language="javascript">window.allow_firefox_cadesplugin_async=1</script>
<script language="javascript" src="/bitrix/js/crypto-pro/ie_eventlistner_polyfill.js"></script>
<script language="javascript" src="/bitrix/js/crypto-pro/cadesplugin_api.js"></script>
<script language="javascript" src="/bitrix/js/crypto-pro/Code.js"></script>
<script language="javascript" src="/bitrix/js/crypto-pro/nmcades_plugin_api.js"></script>
<script language="javascript" src="/bitrix/js/crypto-pro/async_code.js"></script>
<script type="text/javascript" src="chrome-extension://iifchhfnnmpdbibifmljnfjhpififfog/nmcades_plugin_api.js"></script>
<script type="text/javascript">
cadesplugin.then(function () {
Common_CheckForPlugIn();
},
function(error) {
alert("error")
}
);
</script>
<div id="min-width">
<div id="container">
<table>
<tr>
<td>
<div class="mainContent">
<div id="left-col">
<p id="info_msg" name="CertificateTitle">Сертификат:</p>
<div id="item_border" name="CertListBoxToHide">
<select size="4" name="CertListBox" id="CertListBox" style="width:100%;resize:none;border:0;">
</select>
</div>
<div id="cert_info" style="display:none">
<h2>Информация о сертификате</h2>
<p class="info_field" id="subject"></p>
<p class="info_field" id="issuer"></p>
<p class="info_field" id="from"></p>
<p class="info_field" id="till"></p>
<p class="info_field" id="provname"></p>
<p class="info_field" id="algorithm"></p>
<p class="info_field" id="status"></p>
</div>
<div id="item_border">
<textarea id="DataToSignTxtBox" name="DataToSignTxtBox" style="display: none; height:200px;width:100%;resize:none;border:0;">
<?=$html;?> //сдесь лежит документ, который надо подписать
</textarea>
</div>
<p></p>
<p></p>
<div class="layout">
<input id="SignBtn" type="button" value="Подписать ЭЦП" name="SignData" onclick="Common_SignCadesBES('CertListBox');" />
</div>
<p id="info_msg" name="SignatureTitle">Подпись:</p>
<div id="item_border">
<textarea id="SignatureTxtBox" style="font-size:9pt;height:600px;width:100%;resize:none;border:0;">
</textarea>
<script language="javascript">
var txtDataToSign = "Hello World";
document.getElementById("SignatureTxtBox").innerHTML = "";
var canPromise = !!window.Promise;
if(canPromise) {
cadesplugin.then(function () {
Common_CheckForPlugIn();
},
function(error) {
document.getElementById('PluginEnabledImg').setAttribute("src", "Img/red_dot.png");
document.getElementById('PlugInEnabledTxt').innerHTML = error;
}
);
} else {
window.addEventListener("message", function (event){
if (event.data == "cadesplugin_loaded") {
CheckForPlugIn_NPAPI();
} else if(event.data == "cadesplugin_load_error") {
document.getElementById('PluginEnabledImg').setAttribute("src", "Img/red_dot.png");
document.getElementById('PlugInEnabledTxt').innerHTML = "Плагин не загружен";
}
},
false);
window.postMessage("cadesplugin_echo_request", "*");
}
</script>
</div>
<p></p>
</div>
</div>
</td>
</tr>
</table>
</div>
</div>
//отправим на прокси сервер
<form method="post" action="http://192.168.9.7:8000/Service">
<input type="hidden" name="filecontent" value="<?=$html?>">
<input type="hidden" name="filename" value="filetosign1.txt">
<input type="hidden" name="backpost" value="https://192.168.5.22/get_excel/vote_criptopro.php?ID=1_pdf">
<input type="hidden" name="signaturetype" value="CMS:IsDetached=false;">
<input type="hidden" name="documentInfo" value="SGVsbG8=">
<input type="submit" value="Отправить" />
</form>
Скрипт подписывает документ с выбранным сертификатом, проверили в госуслуге сам текст вручную на
https://www.gosuslugi.ru/pgu/eds/ ЭП 1: ВЕРНА
Статус сертификата подписи: Сертификат был выдан не аккредитованным УЦ/не доверенным УЦ
Владелец : RU, MOSKOW, frp, it, bsi
Издатель: CRYPTO-PRO Test Center 2, CRYPTO-PRO LLC, Moscow, RU,
support@cryptopro.ruДействителен: с 2018.03.31 по 2018.06.30
1) Как можно отправить подписанный текст на наш сервер КриптоПро .NET для проверки подлинности документа? Есть ли какие-либо примеры?
2) Скрипт работает только в IE. Что необходимо дописать, чтобы заработал в других браузерах (Chrome и т.д.)