Подпись XML (Java)
(1 чел.) (1) гость
  • Страница:
  • 1
  • 2

ТЕМА: Подпись XML (Java)

Подпись XML (Java) 4 года назад #1744

  • Zlydnia
  • Новый участник
  • Постов: 5
  • Репутация: 0
Добрый день!
Пытаюсь зарегистрировать разобраться с подписью XML, есть в наличии Kalkan, не нашел пример регистрации крипто провайдера в ОС, сделал по примеру с Lola( pki.gov.kz/index.php/ru/forum/7-dlya-raz...peratsionnoj-sisteme ) . Результат выполнения инструкции:
"Модуль <откуда загружаем> загружен, но точка входа DLLRegisterServer не найдена"

Далее выполняю запуск примера загрузки провайдера (JDK 1.6-17):

import java.security.Provider;
import java.security.Security;
import kz.gov.pki.kalkan.jce.provider.KalkanProvider;

/**
 *
 * @author adil <berikuly_a@pki.gov.kz>
 */
public class LoadProvider {
    
    public static void main(String[] args) {
        
        // Инициализация провайдера
        Provider kalkanProvider = new KalkanProvider();
        
        
        //Добавление провайдера в java.security.Security
        boolean exists = false;
        Provider[] providers = Security.getProviders();
        for (Provider p : providers) {
            if (p.getName().equals(kalkanProvider.getName())) {
                exists = true;
            }
        }
        if (!exists) {
            Security.addProvider(kalkanProvider);
        }
        
        // Для дальнейшего использования наименования провайдера определяется
        //1
         String providerName = kalkanProvider.getName();
        //2 или
        providerName = KalkanProvider.PROVIDER_NAME;
    }
}


Результат выполнения:
Exception in thread "main" java.lang.NoClassDefFoundError: java/lang/ReflectiveOperationException
at org.apache.xml.security.Init.init(SourceFile)
at kz.gov.pki.kalkan.jce.provider.KalkanProvider.setup(KalkanProvider.java:91)
at kz.gov.pki.kalkan.jce.provider.KalkanProvider.access$000(KalkanProvider.java:42)
at kz.gov.pki.kalkan.jce.provider.KalkanProvider$1.run(KalkanProvider.java:73)
at java.security.AccessController.doPrivileged(Native Method)
at kz.gov.pki.kalkan.jce.provider.KalkanProvider.<init>(KalkanProvider.java:69)
at Go.sign(Go.java:177)
at Go.main(Go.java:77)
Caused by: java.lang.ClassNotFoundException: java.lang.ReflectiveOperationException
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
... 8 more

Сюда же вопрос, а есть примеры работы с Kalkan на JAVA, кроме OCSPTest и CSPTest?
Подписание SOAP, XML, файл?
Спасибо.

Re: Регистрация IolaCOM.dll в операционной системе 4 года назад #1745

  • Zlydnia
  • Новый участник
  • Постов: 5
  • Репутация: 0
так же вопрос по java, какие версии поддерживает kalkan?

Re: Регистрация IolaCOM.dll в операционной системе 4 года назад #1746

  • Zlydnia
  • Новый участник
  • Постов: 5
  • Репутация: 0
java 1.8-25 тоже самое выдает

Re: Регистрация IolaCOM.dll в операционной системе 4 года назад #1749

  • Zlydnia
  • Новый участник
  • Постов: 5
  • Репутация: 0
Добрый день.
Проблему выявил, проблема была в следующем:
1) java/lang/ReflectiveOperationException since java 1.7 и выше
2) конструкция foreach применима в java до версии 1.6
for (Provider p : providers)


То есть пример нельзя запустить

Но вопрос по примерам остался актуальным, есть примеры использования Kalkan а в создание подписи XML?
Спасибо

Re: Регистрация IolaCOM.dll в операционной системе 3 года, 11 мес. назад #1794

  • proteam
  • Новый участник
  • Постов: 4
  • Репутация: 0
Поддерживаю вопрос в теме. Было бы не плохо увидеть примеры.

Re: Регистрация IolaCOM.dll в операционной системе 3 года, 11 мес. назад #1802

  • ololo
  • Живу я здесь
  • Постов: 464
  • Репутация: 57
если нужна работа чисто с криптопровайдером, то для начала необходимо скопировать из библиотеки аплета пакет с файлами kz.gov.pki.kalkan.xmldsig и включить их в какую-нибудь общезагружаемую библиотеку.

а код примерно как-то так

для начала необходимо определить конфигурацию для xml-security
public static void loadXMLSecurity() {
    System.setProperty("org.apache.xml.security.resource.config", "/kz/gov/pki/kalkan/xmldsig/pkigovkz.xml");
        org.apache.xml.security.Init.init();
        org.apache.xml.security.algorithms.JCEMapper.setProviderId(KalkanProvider.PROVIDER_NAME);
    }


парсим строку
public static Document parseStringToXMLDocument(String xmlString, String encoding) throws AppletException {
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            dbf.setNamespaceAware(true);
            DocumentBuilder documentBuilder = dbf.newDocumentBuilder();
            return documentBuilder.parse(new ByteArrayInputStream(xmlString.getBytes(encoding)));
        } catch (Exception e) {
            Logger.getLogger(XmlUtil.class.getName()).log(Level.SEVERE, null, e);
            throw new AppletException(AECodes.XML_PARSE_EXCEPTION.toString());
        }        
    }


подписываем
public static String signXml(Storage storage, String storagePath, String alias, char[] password, Provider provider, String xmlToSign) throws AppletException {

        KeyStore store = null;
        try {
            final Document doc = XmlUtil.parseStringToXMLDocument(xmlToSign, AppletConstants.UTF_8_ENCODING);

            final String signMethod;
            final String digestMethod;

            store = KeyStoreUtil.getKeyStore(storage, storagePath, password, provider);
            if (store == null) {
                throw new AppletException(AECodes.SIGN_NULL_KEYSTORE.toString());
            }

            final PrivateKey privateKey = (PrivateKey) store.getKey(alias, password);
            final X509Certificate x509Certificate = (X509Certificate) store.getCertificate(alias);

            if ((privateKey.getAlgorithm().toUpperCase().compareTo("ECGOST34310") == 0)) {
                signMethod = Constants.MoreAlgorithmsSpecNS + "gost34310-gost34311";
                digestMethod = Constants.MoreAlgorithmsSpecNS + "gost34311";
            } else {
//                signMethod = Constants.MoreAlgorithmsSpecNS + "rsa-sha1";
//                digestMethod = Constants.MoreAlgorithmsSpecNS + "sha1";
                signMethod = Constants.MoreAlgorithmsSpecNS + "rsa-sha256";
                digestMethod = XMLCipherParameters.SHA256;
            }
                    XMLSignature sig = new XMLSignature(doc, "", signMethod);
                    String result = null;
                    if (doc.getFirstChild() != null) {
                        doc.getFirstChild().appendChild(sig.getElement());
                        Transforms transforms = new Transforms(doc);
                        transforms.addTransform(Transforms.TRANSFORM_ENVELOPED_SIGNATURE);
                        transforms.addTransform(XMLCipherParameters.N14C_XML_CMMNTS);
                        sig.addDocument("", transforms, digestMethod);
                        sig.addKeyInfo(x509Certificate);
                        sig.sign(privateKey);
                        StringWriter os = new StringWriter();
                        TransformerFactory tf = TransformerFactory.newInstance();
                        Transformer trans = tf.newTransformer();
                        trans.transform(new DOMSource(doc), new StreamResult(os));
                        os.close();
                        result = os.toString();
                    }
                    
            if (result == null) {
                throw new AppletException(AECodes.BAD_XML_FORMAT.toString());
            }
            return result;
        } catch (AppletException e) {
            throw e;
        } catch (Exception e) {
            Logger.getLogger(KeyStoreUtil.class.getName()).log(Level.SEVERE, null, e);
            throw new AppletException(AECodes.SIGN_COMMON.toString());
        } finally {
            store = null;
        }
    }
gg wp
Изменено: 3 года, 11 мес. назад от ololo.
  • Страница:
  • 1
  • 2
FaLang translation system by Faboba