Форум КриптоПро
»
Устаревшие продукты
»
КриптоПро CSP 3.6
»
Настройка параметров подписи в CryptoPro Browser Plugin
Статус: Новичок
Группы: Участники
Зарегистрирован: 11.01.2013(UTC) Сообщений: 1  Откуда: Рыбинск
|
Добрый день! Есть функция на java, которая подписывает сообщение и выдает подпись в формате PKCS#7 detached. Обратить внимание здесь стоит на задание параметров ContentInfo (all) и Signed Data (cms). Код:
public static List<byte[]> signByteArray(byte[] data) throws Exception {
final String STR_CMS_OID_SIGNED = "1.2.840.113549.1.9.3";
final String STR_CMS_OID_DATA = "1.2.840.113549.1.7.1";
ContentInfo all = new ContentInfo();
all.contentType = new Asn1ObjectIdentifier(new OID(STR_CMS_OID_SIGNED ).value);
final SignedData cms = new SignedData();
all.content = cms;
cms.version = new CMSVersion(4);
cms.digestAlgorithms = new DigestAlgorithmIdentifiers(new DigestAlgorithmIdentifier[]{new DigestAlgorithmIdentifier(new OID(JCP.GOST_DIGEST_OID).value)});
cms.encapContentInfo = new EncapsulatedContentInfo(
new Asn1ObjectIdentifier(
new OID(STR_CMS_OID_DATA).value),
null);
X509Certificate cert = getCertificate();
cms.certificates = new CertificateSet(1);
cms.certificates.elements = new CertificateChoices[1];
cms.certificates.elements[0] = new CertificateChoices();
cms.certificates.elements[0].set_certificate(convertToAsn1Certificate(cert));
byte[] sign;
java.security.Signature signature = java.security.Signature.getInstance(JCP.GOST_EL_SIGN_NAME);
signature.initSign(getPrivateKey());
signature.update(data);
sign = signature.sign();
cms.signerInfos = new SignerInfos(1);
cms.signerInfos.elements[0] = new SignerInfo();
cms.signerInfos.elements[0].version = new CMSVersion(1); //because of issuerAndSerialNumber. More: rfc.3852, p.13.
cms.signerInfos.elements[0].sid = new SignerIdentifier();
final byte[] encodedName = cert.getIssuerX500Principal().getEncoded();
final Asn1BerDecodeBuffer nameBuf = new Asn1BerDecodeBuffer(encodedName);
final Name name = new Name();
name.decode(nameBuf);
final CertificateSerialNumber num = new CertificateSerialNumber(cert.getSerialNumber());
cms.signerInfos.elements[0].sid.set_issuerAndSerialNumber(new IssuerAndSerialNumber(name, num));
cms.signerInfos.elements[0].digestAlgorithm = new DigestAlgorithmIdentifier(new OID(JCP.GOST_DIGEST_OID).value);
cms.signerInfos.elements[0].digestAlgorithm.parameters = new Asn1Null();
cms.signerInfos.elements[0].signatureAlgorithm = new SignatureAlgorithmIdentifier(new OID(JCP.GOST_EL_SIGN_OID).value);
cms.signerInfos.elements[0].signatureAlgorithm.parameters = new Asn1Null();
cms.signerInfos.elements[0].signature = new SignatureValue(sign);
final Asn1BerEncodeBuffer asnBuf = new Asn1BerEncodeBuffer();
all.encode(asnBuf, true);
List<byte[]> r= new LinkedList<byte[]>();
r.add(data);
r.add(asnBuf.getMsgCopy());
return r;
}
На данный момент подписывание сообщения на javascript сделано на основе примера из документации (с небольшими изменениями). Код:function SignCreate(certSubjectName, dataToSign) {
var oStore = CreateObject("CAPICOM.Store");
oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE,
CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
var oCertificates = oStore.Certificates.Find(
CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, certSubjectName);
if (oCertificates.Count == 0) {
alert("Certificate not found");
return;
}
var oCertificate = oCertificates.Item(1);
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, CADES_BES, true);
} catch (err) {
alert("Failed to create signature. Error: " + GetErrorMessage(err));
return;
}
oStore.Close();
return sSignedMessage;
}
Таким образом при подписывании одинаковых данных одним и тем же сертификатом на сервере и в браузере получаются разные по формату подписи. Подскажите, как через CryptoPro browser plugin при подписывании задать параметры, аналогичные java-коду, а именно all.contentType = new Asn1ObjectIdentifier(new OID(STR_CMS_OID_SIGNED ).value); ... cms.version = new CMSVersion(4); ... cms.encapContentInfo = new EncapsulatedContentInfo(new Asn1ObjectIdentifier(new OID(STR_CMS_OID_DATA).value),null); Насколько я понимаю, копать нужно в сторону установки AuthenticatedAttributes2 и UnauthenticatedAttributes у объекта CPSigner, но на данный момент не получается разобраться, как с ними работать. Спасибо.
|
|
|
|
Форум КриптоПро
»
Устаревшие продукты
»
КриптоПро CSP 3.6
»
Настройка параметров подписи в CryptoPro Browser Plugin
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close