Здравствуйте!
Возникла необходимость подписывать Word документы, созданные в процессе работы. Использую плагин Крипто Про Browser plugin.
<script type="text/javascript">
RunPlugin();
var CADESCOM_CADES_X_LONG_TYPE_1 = 0x5d;
var CAPICOM_CURRENT_USER_STORE = 2;
var CAPICOM_MY_STORE = "My";
var CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2;
var CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME = 1;
function FillCertList(lstId) {
var oStore = CreateObject("CAPICOM.store");
if (!oStore) {
alert("store failed");
return;
}
try {
oStore.Open();
}
catch (e) {
alert("Ошибка при открытии хранилища: " + GetErrorMessage(e));
return;
}
var certCnt = oStore.Certificates.Count;
var lst = document.getElementById(lstId);
for (var i = 1; i <= certCnt; i++) {
var cert;
try {
cert = oStore.Certificates.Item(i);
}
catch (ex) {
alert("Ошибка при перечислении сертификатов: " + GetErrorMessage(ex));
return;
}
var oOpt = document.createElement("OPTION");
try {
oOpt.text = cert.SubjectName;
}
catch (e) {
alert("Ошибка при получении свойства SubjectName: " + GetErrorMessage(e));
}
try {
oOpt.value = cert.Thumbprint;
}
catch (e) {
alert("Ошибка при получении свойства Thumbprint: " + GetErrorMessage(e));
}
lst.options.add(oOpt);
}
oStore.Close();
}
function GetErrorMessage(e) {
var err = e.message;
if (!err) {
err = e;
} else if (e.number) {
err += " (" + e.number + ")";
}
return err;
}
function CreateObject(name) {
switch (navigator.appName) {
case 'Microsoft Internet Explorer':
return new ActiveXObject(name);
default:
var userAgent = navigator.userAgent;
if (userAgent.match(/Trident\/./i)) { // IE10, 11
return new ActiveXObject(name);
}
var cadesobject = document.getElementById('cadesplugin');
return cadesobject.CreateObject(name);
}
}
function SignCreate(oCertificate, dataToSign) {
var CADESCOM_CADES_X_LONG_TYPE_1 = 0x5d;
var oSigner = CreateObject("CAdESCOM.CPSigner");
oSigner.Certificate = oCertificate;
oSigner.TSAAddress = "http://cryptopro.ru/tsp/";
var oSignedData = CreateObject("CAdESCOM.CadesSignedData");
oSignedData.Content = dataToSign;
try {
var sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_X_LONG_TYPE_1);
} catch (err) {
alert("Failed to create signature. Error: " + GetErrorMessage(err));
return;
}
return sSignedMessage;
}
function Verify(sSignedMessage) {
var CADESCOM_CADES_X_LONG_TYPE_1 = 0x5d;
var oSignedData = CreateObject("CAdESCOM.CadesSignedData");
try {
oSignedData.VerifyCades(sSignedMessage, CADESCOM_CADES_X_LONG_TYPE_1);
} catch (err) {
alert("Failed to verify signature. Error: " + GetErrorMessage(err));
return false;
}
return true;
}
function selectCertificate() {
var CAPICOM_STORE_OPEN_READ_ONLY = 0;
var CAPICOM_CURRENT_USER_STORE = 2;
try {
var CertStore = CreateObject("CAPICOM.Store");
} catch (err) {
alert('Failed to create CAPICOM.store: ' + err.number);
return;
}
//Открываем хранилище сертификатов пользователя только для чтения
CertStore.Open(CAPICOM_CURRENT_USER_STORE, "MY", CAPICOM_STORE_OPEN_READ_ONLY);
//Выводим пользователю окно выбора сертификата
try {
var certificate = CertStore.Certificates.Select(
"Выберите сертификат для подписи документа."
, "Выберите один из сертификатов", false);
}
catch (e)
{
alert('ошибка сертификат'+ e.message);
// Пользователь не выбрал сертификат
}
return certificate.Item(1);
}
function RunPlugin() {
//FillCertList('ctl00_ContentPlaceHolder1_CertListBox');
var oCertificate = selectCertificate();
var signedMessage = SignCreate(oCertificate, "Message");
//alert(signedMessage);
var verifyResult = Verify(signedMessage);
if (verifyResult) {
alert("Signature verified");
}
}
</script>
Скажите пожалуйста как подписать word документ. В моем примере подписывается сообщение:
var signedMessage = SignCreate(oCertificate, "Message");
Как я понимаю необходимо данные signedMessage засунуть во вновь созданный word документ. Но вот работа javascript с файлами идет туго. Подскажите пожалуйста...
Заранее спасибо!