Статус: Новичок
Группы: Участники
Зарегистрирован: 26.05.2017(UTC) Сообщений: 7 Откуда: Москва Сказал(а) «Спасибо»: 5 раз
|
Добрый день! Я разрабатываю функционал, который взаимодействует с веб-сервисом УЦ Крипто Про. Использую Axis и JCP. Мне удалось успешно отправить запрос на регистрацию пользователя (submitRegRequest) и принять этот запрос (acceptRegRequest). Но далее при вызове метода submitCertRequest получаю ошибку: Код:{http://schemas.datacontract.org/2004/07/System.ServiceModel}ExceptionDetail:<HelpLink i:nil="true"/><InnerException i:nil="true"/><Message>(1): При выполнении операции произошла непредвиденная ошибка.</Message><StackTrace> at RegistrationService.ServiceImplementation.PushChangesUtil.CallPushChanges(ChangedRowCollection changedRows)
at RegistrationService.ServiceImplementation.RegAuthLegacyService.SendNewCertRequest(Guid userId, String rawSignedRegRequest, String userComment, String authority)
at RegistrationService.ServiceImplementation.RegAuthLegacyService.SubmitCertRequest(String userId, String rawCertRequest, String userComment, String authority)
at SyncInvokeSubmitCertRequest(Object , Object[] , Object[] )
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</StackTrace><Type>System.InvalidOperationException</Type>
(1): При выполнении операции произошла непредвиденная ошибка.
В логах на сервере, где установлен КриптоПро УЦ вижу вот такую ошибку: Код:It was not possible to create request for the certificate. Executor: Смирнов Анатолий (UserId: 8f6be19c-9439-e711-810c-005056953b1d) Verbose: Добавление строки (Id: 094f7b0e-3d42-e711-810d-005056953b1d) в таблице CertRequest.
Список значений колонок:
Идентификатор запр. на сертификат (CertRequestId: 0x3000) = 094f7b0e-3d42-e711-810d-005056953b1d
Идентификатор пользователя (UserId: 0x3001) = e5f61fc4-b93f-e711-810d-005056953b1d
Статус запроса (код) (Status: 0x3004) = Q
Двоичный запрос (RawRequest: 0x300c) = System.Byte[]
Комментарий пользователя (UserComment: 0x3029) = user comment 1
Признак совместимости формата с 1.5 (CompatMode: 0x303d) = 0
Error description: System.Security.Cryptography.CryptographicException: ASN1 bad tag value met.
at CryptoPro.CertEncode.EncodeUtils.DecodeObjectEx(String structType, Byte[] pbEncoded, UInt32 dwFlags, HLOCAL& pvStructInfo)
at CryptoPro.CertEncode.X509CertificateTemplateExtension.DecodeValue()
at CryptoPro.Cmc.CmcRequest.GetTemplate()
at CryptoPro.Configuration.ExtensionMethodTryGetTemplateOid.TryGetTemplateOid(CmcRequest request, IReadOnlyDictionary`2 name2Oid, Boolean allow15Templates, String& oid, Nullable`1& majorVersion, Nullable`1& minorVersion)
at RegistrationService.BusinessLogic.Preprocess.ExtractTemplateAndCheckPermissionsOnTemplate(ChangeRaRowContext context, Object entityObject)
at RegistrationService.BusinessLogic.ProcessActions.Run(ChangeRaRowContext context, Object entityObject, List`1& waitCompleteHandlers)
at RegistrationService.BusinessLogic.ChangeRaRowOperation.OnRowChanging(ChangeRaRowContext context, Object entityObject, List`1& waitCompleteHandlers)
at PkiService.BusinessLogic.ChangeRowOperationBase`1.Run(List`1& waitCompleteHandlers)
Вот мой код: Код:
public void testSubmitCertRequest() throws Exception {
AxisProperties.setProperty("axis.socketSecureFactory", MySocketFactory.class.getCanonicalName());
RegAuthLegacyServiceLocator locator = new RegAuthLegacyServiceLocator();
RegAuthLegacyContract port = locator
.getRegAuthLegacyServiceEndpoint(new URL("https://zzzz/RA/RegAuthLegacyService.svc"));
final PrivateKey key = CMStools.loadKey("asmirnov", "123456".toCharArray());
PrivateKey[] keys = new PrivateKey[1];
keys[0] = key;
final Certificate cert = CMStools.loadCertificate("asmirnov");
Certificate[] certs = new Certificate[1];
certs[0] = cert;
// Для теста используются константы (пользователь ранее создан):
String userID = "e5f61fc4-b93f-e711-810d-005056953b1d";
String certRawRequest = createTestRawCertRequest(keys, certs);
port.submitCertRequest(userID, certRawRequest, "user comment 1", null);
}
private String createTestRawCertRequest(PrivateKey[] keys, Certificate[] certs) throws Exception {
final KeyPairGenerator kg = KeyPairGenerator.getInstance(JCP.GOST_DH_NAME);
final KeyPair pair = kg.generateKeyPair();
final GostCertificateRequest req = new GostCertificateRequest();
req.init(JCP.GOST_DH_NAME, false);
req.setPublicKeyInfo(pair.getPublic());
req.setSubjectInfo("CN=" + "Aksenov");
int keyUsage = GostCertificateRequest.DIGITAL_SIGNATURE |
GostCertificateRequest.NON_REPUDIATION |
GostCertificateRequest.KEY_ENCIPHERMENT |
GostCertificateRequest.KEY_AGREEMENT;
req.setKeyUsage(keyUsage);
//Передача CertificateTemplate
Extension ext = new Extension();
int[] extOid = new OID("1.3.6.1.4.1.311.21.7").value;
ext.extnID = new Asn1ObjectIdentifier(extOid);
ext.critical = new Asn1Boolean(false);
ext.extnValue = new Asn1OctetString("1.2.643.2.2.46.0.8");
req.addExtension(ext);
req.encodeAndSign(pair.getPrivate());
byte[] enc = req.getEncoded();
byte[] cms = CMS.CMSSign(enc, keys[0], certs[0], false);
String signedRawRequest = new String(Base64Codec.encodeBase64(cms));
return signedRawRequest;
}
Подскажите, пожалуйста, в чем причина ошибки.
|