| ||||
| ||||
Не удается подружить JBoss(Tomcat) с JTLS. С помощью кода try { KeyPairGenerator kg = KeyPairGenerator.getInstance("GOST3410DH"); KeyPair pair = kg.generateKeyPair(); // закрытый ключ обмена PrivateKey privKey = pair.getPrivate(); // соответствующий ему открытый ключ PublicKey pubKey = pair.getPublic(); final GostCertificateRequest req; req = new GostCertificateRequest(); req.init("GOST3410DH", true); final byte[] encodedCert = req.getEncodedSelfCert(pair, "CN=tomcat,OU=Security,O=CryptoPro,C=RU"); final CertificateFactory cf = CertificateFactory.getInstance("X509"); final java.security.cert.Certificate[] certs; certs = new java.security.cert.Certificate[1]; certs[0] = cf.generateCertificate(new ByteArrayInputStream(encodedCert)); KeyStore hdImageStore = KeyStore.getInstance("FloppyStore"); hdImageStore.load(null, null); hdImageStore.setKeyEntry("tomcat", privKey, "tomcat".toCharArray(), certs); hdImageStore.store(new FileOutputStream(new File("A:\\.keystore")), "tomcat".toCharArray()); } catch(Exception e) { e.printStackTrace();; } на дискете создатся файлы a:\.keystore(12 байт) и a:\tomcat.000\masks2.key (primary2.key, masks.key, primary.key, header.key, name.key) В Tomcat прописан коннектор <Connector port="8443" maxHttpHeaderSize="8192" SSLEnabled="true" SSLImplementation="ru.CryptoPro.TomCatSSL.JSSEImplementation" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="false" sslProtocol="GostTLS" algorithm="GostX509" keystoreProvider="JCP" keystoreType="FloppyStore" keystoreFile="A:\.keystore" keystorePass="tomcat" keyalg="GOST3410" sigalg="GOST3411withGOST3410EL" keyAlias="tomcat" /> При старте JBoss'a возникает ошибка 11:40:06,303 ERROR [JSSESocketFactory] Exception trying to load keystore A:\.keystore java.security.KeyStoreException: FloppyStore not found at java.security.KeyStore.getInstance(KeyStore.java:565) at ru.CryptoPro.TomCatSSL.JSSESocketFactory.a(Unknown Source) at ru.CryptoPro.TomCatSSL.JSSESocketFactory.getKeystore(Unknown Source) at ru.CryptoPro.TomCatSSL.JSSE14SocketFactory.getKeyManagers(Unknown Source) Что сделано неправильно? | ||||
Ответы: | ||||
| ||||
java.security.KeyStoreException: FloppyStore not found хранилище не найдено попробуйте поработать с контрольной панелью (видно ли там хранилище, и читаются ли ключи и сертификаты в нем)... | ||||
| ||||
Проверил. Из контрольной панели (ControlPane.bat) ключ и сертификат видны и читаются. | ||||
| ||||
скажите пожайлуста -какие у вас версии java и т.д. -пробовали ли сделать то же самое, но с HDImageStore -установлен ли пароль на хранилище -пробовали ли работать через JSEE (без переходника TomCatSSL) -как настроен TomCat (системно) [см. Руководство программиста КриптоПро JTLS] | ||||
| ||||
Проблема с поиском контейнера решена, она возникала из-за неверно настроенной jre. Но теперь возникает новая ошибка. В принципе, она уже поднималась в форуме (05.07.2007 14:56:09 “JTLS и Tomcat” Даниил Швед, Астра-СТ ). Т.е. при попытке установить соединение по порту 8443 в tomcat, IE выдает стандартную страницу "Невозможно отобразить страницу". Сервер и клиент находятся на одном компьютере (XP Home Edition SP2). | ||||
| ||||
при clientAuth="false" все должно работать (проверяйте настройки, для верности скачайте последние весрсии JCP и JTLS),а вот при clientAuth="true" есть описанная вами проблема... пытаемся решить | ||||
| ||||
По правде говоря, проблемы с обоими параметрами clientAuth :(. Возник еще один вопрос. Как проверить средствами JCP подпись, созданную через CAPICOM. Метод Sign возвращает строку типа MIICMwYJKoZIhvcNAQcCoIICJDCCAiACAQExDDAKBgYqhQMCAgkFADARBgkqhkiG 9w0BBwGgBAQCMQCgggFYMIIBVDCCAQECBEcJ8H4wCgYGKoUDAgIDBQAwMzELMAkG A1UEBhMCUlUxEjAQBgNVBAoTCUNyeXB0b1BybzEQMA4GA1UEAxMHdG9tY2F0NDAe Fw0wNzEwMDgwODU1MjZaFw0wODAxMDYwODU1MjZaMDMxCzAJBgNVBAYTAlJVMRIw EAYDVQQKEwlDcnlwdG9Qcm8xEDAOBgNVBAMTB3RvbWNhdDQwYzAcBgYqhQMCAhMw EgYHKoUDAgIjAQYHKoUDAgIeAQNDAARAAW35vikunRvjCxcJqc8wiVDOsGYSiP4r LGmOQL2rW48dwRTGaGIxE4qcfbEXLLfL0BK4XOW0bFLeils/2WS5XjAKBgYqhQMC AgMFAANBAC/+vy2IIiqKSTt1auWkzdIboGiW1daaogs+aycYHrm+lw9lBVF57qIE 7+SEG/XWgPtgI+yJIreGpKibGxm48vwxgZ0wgZoCAQEwOzAzMQswCQYDVQQGEwJS VTESMBAGA1UEChMJQ3J5cHRvUHJvMRAwDgYDVQQDEwd0b21jYXQ0AgRHCfB+MAoG BiqFAwICCQUAMAoGBiqFAwICEwUABED9/ijC4b3QpIZzZT064hGUhYNdaAB+/ZFL VB+vILznXSkfNIAqgG7VS/w55oQS5ZvRdkQgC/nc+OrM7EksZAvz Эта строка отправляется на сервер, где планируется проверить ее следующим образом: CertificateFactory cfg = CertificateFactory.getInstance("X509"); Certificate cert0 = cfg.generateCertificate(new FileInputStream(new File("*.cer"))); PublicKey pub = cert.getPublicKey(); byte[] signature = getSign().getBytes(); sig.initVerify(pub); boolean verifies = sig.verify(signature); Судя по тому, что sig.sign() возвращает подпись в виде массива из 64 байт, то приведенный код работать не будет. Как изменить код, чтобы подпись, созданная средствами CAPICOM, была понятна в JCP? | ||||
| ||||
про TomCat все же остаются вопросы: -какие у вас версии java и т.д. -пробовали ли работать через JSEE (без переходника TomCatSSL) -как настроен TomCat (системно) | ||||
| ||||
CAPICOM создает cms сообщение все что пока могу предложить это примеры : samples_src.jar/CMS_samples (подпись и проверка подписи) более удобные инструменты в разработке... | ||||
| ||||
Спасибо. Я посмотрел пример по CMS. Файл с подписью, который создается в примере, отличается от той подписи, которая формируется через CAPICOM (MIICMwYJKoZIhvcNAQcCoIICJDCCAiACAQExDDAKB...). При попытке вызвать метод CMSVerify с подписью, сформирмированной через CAPICOM, возникает исключение: com.objsys.asn1j.runtime.Asn1TagMatchFailedException: ASN.1 decode error @ offset 0: Tag match failed: expected [UNIVERSAL 16], parsed [APPLICATION 13] at com.objsys.asn1j.runtime.Asn1Type.matchTag(Asn1Type.java:49) at com.objsys.asn1j.runtime.Asn1Type.matchTag(Asn1Type.java:65) at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.decode(ContentInfo.java:55) at com.objsys.asn1j.runtime.Asn1Type.decode(Asn1Type.java:15) at CMS.CMSVerify(CMS.java:210) at CMS.main(CMS.java:98) Можно ли изменить метод CMSVerify в CMS.java, что он принимал CAPICOM подпись. | ||||
| ||||
В примерах не учтена кодировка. Подпись Capicom в Base64, а в примере нужно подавать байтовый массив. Раскодируйте подпись, а потом запустите проверку. | ||||
| ||||
Спасибо за консультации по CAPICOM. Заработало. Возвращаясь к проблеме Tomcat'а. Версии: java-1.5.0 tomcat-5.5 jcp-1.0.29 Настройки в tomcat/conf/server.xml <Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="false" SSLImplementation="ru.CryptoPro.TomCatSSL.JSSEImplementation" sslProtocol="GostTLS" algorithm="GostX509" keystoreProvider="JCP" keystoreType="FloppyStore" keystoreFile="A:\tomcat4.keystore" keystorePass="tomcat4" keyalg="GOST3410" sigalg="GOST3411withGOST3410EL" keyAlias="tomcat4" /> При запуске ошибок в логе нет, обращения к ключу проходят. Если удалить строку SSLImplementation="ru.CryptoPro.TomCatSSL.JSSEImplementation" , то при старте возникают ошибки java.io.IOException: Export restriction: SSLServerSocketFactory supports non-pluggable ciphersuite(s) at org.apache.tomcat.util.net.jsse.JSSE14SocketFactory.init(JSSE14SocketFactory.java:125) | ||||
| ||||
уточните версию java 1.5.0_? (см. Особенности подключения КриптоПро JTLS//tls.html) | ||||
| ||||
Помог следующий алгоритм шаманства. 1) Генерится ключ (самоподписанный для сервера) с помощью ControlPane.bat 2) Генерится ключ с тем же alias'ом с помощью утилиты keytool. keytool -genkey -alias my_alias -keysize 512 -provider ru.CryptoPro.JCP.JCP -keypass my_alias_pass -storetype FloppyStore -dname CN=my_alias,O=CryptoPro,C=RU -keystore a:\my_alias.keystore -storepass my_alias_pass -keyalg GOST3410 -sigalg GOST3411withGOST3410EL 3) Переносится на дискетку каталог *.000 от ключа 1 и файл my_alias.keystore от ключа 2. Ключ 3 работает, ключи 1 и 2 - нет. Для 1-го непонятно что прописывать в поле keystoreFile="A:\*.keystore" tomcat'овского коннектора из-за отсутствия этого файла после генерации. 2-й не работает, видимо, из-за того, что был создан не для сервера. Если есть более простой путь, то буду признателен, если вы его напишите. И второй вопрос. Для clientAuth=true действительно проблемы остались. В сколь обозримом будущем планируется решить эту проблему? | ||||
| ||||
Помог следующий алгоритм шаманства. 1) Генерится ключ (самоподписанный для сервера) с помощью ControlPane.bat 2) Генерится ключ с тем же alias'ом с помощью утилиты keytool. keytool -genkey -alias my_alias -keysize 512 -provider ru.CryptoPro.JCP.JCP -keypass my_alias_pass -storetype FloppyStore -dname CN=my_alias,O=CryptoPro,C=RU -keystore a:\my_alias.keystore -storepass my_alias_pass -keyalg GOST3410 -sigalg GOST3411withGOST3410EL 3) Переносится на дискетку каталог *.000 от ключа 1 и файл my_alias.keystore от ключа 2. Ключ 3 работает, ключи 1 и 2 - нет. Для 1-го непонятно что прописывать в поле keystoreFile="A:\*.keystore" tomcat'овского коннектора из-за отсутствия этого файла после генерации. 2-й не работает, видимо, из-за того, что был создан не для сервера. Если есть более простой путь, то буду признателен, если вы его напишите. И второй вопрос. Для clientAuth=true действительно проблемы остались. В сколь обозримом будущем планируется решить эту проблему? | ||||
| ||||
"Для 1-го непонятно что прописывать в поле keystoreFile="A:\*.keystore" tomcat'овского коннектора из-за отсутствия этого файла после генерации." создаете пустой файл *.keystore, заходите в контрольную панель, нажимаете "найти" (путь к trustStore) задаете созданный файл, затем устанавливаете пароль на хранилище (у вас FloppyStore), теперь пути к trustStore и KeyStore одинаковы и пароли тоже нужно поставить везде одинаковые: keystoreType="HDImageStore" keystoreFile="D:/a.store" keystorePass="pass" truststoreFile="D:/a.store" truststorePass="pass" пароль на ключ тоже "pass" "Для clientAuth=true действительно проблемы остались?" -какая у вас версия csp? -вы не пробовали установить сертификаты и запустить TomCat с аутентификацией клиента | ||||
| ||||
Выложены новые версии JCP и JTLS. проблемы с двусторонней аутентификацией устранены. | ||||