Как сформировать нужную для ЕСИА подпсиь по алгоритму ГОСТ 2012?

Для интеграции с ЕСИА требуется подпись в формате PKCS#7 detached signature формирую подпись, используя алгоритм ГОСТ 2012.

но при переходе на URL авторизации вот такая ошибка: error_description: ESIA-007005: The client is not authorized to request an access token using this method.

Всего скорей неправильно формируется client_secret (т.е. некорректная подпись)

ВОПРОС: как сформировать нужную для ЕСИА подпсиь по алгоритму ГОСТ 2012?

Может есть тестовые сертификаты и примеры подписи для них? Чтоб сверить подпись для нижеприведенного алгоритма на JAVA. SIGNATURE_ALGORITHM = GOST3411-2012-256withECGOST3410-2012-256

   public String signMessage(String message) throws Exception {
            ks = loadKeyStore();
            CMSSignedDataGenerator gen = getDataGenerator(ks);
            byte[] bytes = signString(message, gen);
            String res = new String(Base64.encode(bytes));
            return res;
        }
    
        private KeyStore loadKeyStore() throws Exception {
            InputStream stream = getClass().getClassLoader().getResourceAsStream(keyStorePath);
            Security.addProvider(new BouncyCastleProvider());
            KeyStore keyStore = KeyStore.getInstance("PKCS12", "BC");
            keyStore.load(stream, KEYSTORE_PASSWORD.toCharArray());
            return keyStore;
        }
    
        private Key getKeyByKeyStore(KeyStore ks) throws UnrecoverableKeyException, NoSuchAlgorithmException, KeyStoreException {
            String alias = ks.aliases().nextElement();
            return ks.getKey(alias, KEYSTORE_PASSWORD.toCharArray());
        }
    
        private CMSSignedDataGenerator getDataGenerator(KeyStore ks) throws Exception {
            String alias = ks.aliases().nextElement();
            java.security.cert.Certificate [] certs = ks.getCertificateChain(alias);
            List<java.security.cert.Certificate> certList = new ArrayList<>();
            for (int i = 0, length = certs == null ? 0 : certs.length; i < length; i++) {
                certList.add(certs[i]);
            }
    
            Store certstore = new JcaCertStore(certList);
            X509Certificate cert = (X509Certificate) ks.getCertificate(alias);
    
            PrivateKey privateKey = (PrivateKey) getKeyByKeyStore(ks);
            ContentSigner signer = new JcaContentSignerBuilder(SIGNATURE_ALGORITHM)
                    .setProvider("BC")
                    .build(privateKey);
    
            CMSSignedDataGenerator generator = new CMSSignedDataGenerator();
            DigestCalculatorProvider bc = new JcaDigestCalculatorProviderBuilder().setProvider("BC").build();
            generator.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(bc).build(signer, cert));
            generator.addCertificates(certstore);
            return generator;
        }
    
        private byte[] signBytes(final byte[] content, final CMSSignedDataGenerator generator) throws Exception {
            CMSTypedData cmsdata = new CMSProcessableByteArray(content);
            CMSSignedData signeddata = generator.generate(cmsdata, true);
            return signeddata.getEncoded();
        }
    
        private byte[] signString(String content, final CMSSignedDataGenerator generator) throws Exception {
            return signBytes(content.getBytes("UTF-8"), generator);
        }

Ответы (0 шт):