Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline legioner052019  
#1 Оставлено : 24 июня 2019 г. 15:57:44(UTC)
legioner052019

Статус: Активный участник

Группы: Участники
Зарегистрирован: 15.05.2019(UTC)
Сообщений: 33

Добрый день.
ГИС ЖКХ тестовый контур. Подписание Xml Xades.

Код:
fun signXades(sourceDoc: Document) {
    val factory = XPathFactory.newInstance()
    val xpath = factory.newXPath()
    val expr = xpath.compile(String.format("//*[@Id='%s']", "request"))
    val nodes = expr.evaluate(sourceDoc, XPathConstants.NODESET) as NodeList
    val nodeToSign = nodes.item(0)
    val referenceURI = "#request"

    // Ключ подписи.
    val keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME, JCP.PROVIDER_NAME)
    keyStore.load(null, null)
    // Ключ подписи.
    val privateKey = keyStore.getKey(keyStoreAlias, keyStorePassword.toCharArray()) as PrivateKey
    // Сертификат для проверки.
    val cert = keyStore.getCertificate(keyStoreAlias) as X509Certificate

    // 3. Алгоритмы.
    val keyingProvider = DirectKeyingDataProvider(cert, privateKey)
    val sigProf = XadesTSigningProfile(keyingProvider)
        // time-stamp provider. Дополнительно задается список соответствий между
        // алгоритмом хеширования и адресом TSP службы
        .withTimeStampTokenProvider(GostTimeStampTokenProvider(GostXAdESUtility.MAP_DIGEST_OID_2_TSA_URL, JCP.PROVIDER_NAME))

        // digest provider
        .withDigestEngineProvider(object : DefaultMessageDigestProvider() { // digest

            @Throws(UnsupportedAlgorithmException::class)
            override fun getEngine(digestAlgorithmURI: String): MessageDigest {
                try {
                    return MessageDigest.getInstance(JCP.GOST_DIGEST_OID)
                } catch (e: NoSuchAlgorithmException) {
                    throw UnsupportedAlgorithmException(e.message, digestAlgorithmURI, e)
                }

            }

        })

        .withAlgorithmsProviderEx(object : DefaultAlgorithmsProviderEx() { // algorithms

            private var digestUrn: String? = null


            @Throws(UnsupportedAlgorithmException::class)
            override fun getSignatureAlgorithm(keyAlgorithmName: String): Algorithm {
                digestUrn = Consts.URI_GOST_DIGEST
                return GenericAlgorithm(Consts.URI_GOST_SIGN)
            }

            override fun getDigestAlgorithmForReferenceProperties(): String? {
                return digestUrn
            }

            override fun getDigestAlgorithmForDataObjsReferences(): String? {
                return digestUrn
            }

            override fun getDigestAlgorithmForTimeStampProperties(): String? {
                return digestUrn
            }

        })

    // 4. Подпись.
    val signer = sigProf.newSigner()
    val dataObj = DataObjectReference(referenceURI)
    dataObj.withTransform(EnvelopedSignatureTransform())
    dataObj.withTransform(ExclusiveCanonicalXMLWithoutComments())
    val dataObjects = SignedDataObjects(dataObj)
    signer.sign(dataObjects, nodeToSign)
}


Выдает ошибку.
Код:
xades4j.production.SigningCertKeyUsageException: KeyUsage on the signing certificate doesn't include 'digitalSignature' nor 'nonRepudiation'
at xades4j.production.KeyInfoBuilder.buildKeyInfo(KeyInfoBuilder.java:57) ~[xades4j-1.3.2.jar:na]
at xades4j.production.SignerBES.sign(SignerBES.java:175) ~[xades4j-1.3.2.jar:na]
at xades4j.production.SignerBES.sign(SignerBES.java:122) ~[xades4j-1.3.2.jar:na]
at ru.ksbsoft.gisgkh.adapter.ServiceAdapter.signXades(ServiceAdapter.kt:181) ~[classes/:na]

Не нашел информацию об ошибке
Offline Евгений Афанасьев  
#2 Оставлено : 24 июня 2019 г. 16:07:49(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 4,006
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Здравствуйте.
Собственно, ответ: SigningCertKeyUsageException: KeyUsage on the signing certificate doesn't include 'digitalSignature' nor 'nonRepudiation'
Поле "использование ключа" сертификата подписи не содержит назначений "цифровая подпись" и "неотрекаемость".
Проверьте в составе сертификата данное поле.
Offline legioner052019  
#3 Оставлено : 25 июня 2019 г. 9:21:21(UTC)
legioner052019

Статус: Активный участник

Группы: Участники
Зарегистрирован: 15.05.2019(UTC)
Сообщений: 33

Спасибо)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.