08.04.2007 19:36:09Пример в мануале JTLS Ответов: 1
Андрей
В мануале по JTLS 1.0.23 и 1.0.24 есть пример, как строить запрос к центру сертификации...

KeyPairGenerator kg = KeyPairGenerator.getInstance("GOST3410DH");
KeyPair pair = kg.generateKeyPair();

PrivateKey privKey = pair.getPrivate();

PublicKey pubKey = pair.getPublic();

String keyAlg = "GOST3410DH";
boolean isServer = true;
String certName = "CN=newCert, O=CryptoPro, C=RU";
String httpAddress = "http://www.cryptopro.ru/certsrv/";

// создание запроса на сертификат аутентификации сервера
GostCertificateRequest request = new GostCertificateRequest();
request.init(keyAlg, isServer);
request.setPublicKeyInfo(pubKey);

request.encodeAndSign(privKey);

// отправка запроса центру сертификации и получение от центра
// сертификата в DER-кодировке
byte[] encoded = request.getEncodedCert(httpAddress);


// генерация X509-сертификата из закодированного представления сертификата
CertificateFactory cf = CertificateFactory.getInstance("X509");
java.security.cert.Certificate cert = cf
.generateCertificate(new ByteArrayInputStream(encoded));

String password = "password";
String alias = "newKey";
String certPath = "C:\\certificate.cer"; // файл, в который был предварительно
// сохранен корневой сертификат центра

FileInputStream fis = new FileInputStream(certPath);
java.security.cert.Certificate certRoot = cf
.generateCertificate(new BufferedInputStream(fis));

java.security.cert.Certificate[] certs = new java.security.cert.Certificate[2];
certs[0] = certRoot;
certs[1] = cert;

KeyStore hdImageStore = KeyStore.getInstance("HDImageStore");
hdImageStore.load(null, null);
hdImageStore.setKeyEntry(alias, privKey, password.toCharArray(),
certs);
hdImageStore.store(null, null);


При запуске на EncodeAndSign() валится сообщение
java.lang.NullPointerException
at ru.CryptoPro.JCP.ASN.PKIXCMP.CertificationRequest_certificationRequestInfo.encode(CertificationRequest_certificationRequestInfo.java:140)
at com.objsys.asn1j.runtime.Asn1Type.encode(Asn1Type.java:44)
at ru.CryptoPro.JCPRequest.GostCertificateRequest.encodeAndSign(Unknown Source)
Если же добавить строку
request.setSubjectInfo(certName);
При попытке запустить пример, вместо поджписанного сертификата в DER-кодировке возвращается HTML-ка

<HTML>
<Head>
<Meta HTTP-Equiv="Content-Type" Content="text/html; charset=UTF-8">
<Title>Службы сертификации</Title>
</Head>
<Body BgColor=#FFFFFF Link=#0000FF VLink=#0000FF ALink=#0000FF><Font ID=locPageFont Face="Arial">

<Table Border=0 CellSpacing=0 CellPadding=4 Width=100% BgColor=#008080>
<TR>
<TD><Font Color=#FFFFFF><LocID ID=locMSCertSrv><Font Face="Arial" Size=-1><B><I>Microsoft</I></B> Службы сертификации &nbsp;--&nbsp; Test Center CRYPTO-PRO &nbsp;</Font></LocID></Font></TD>
<TD ID=locHomeAlign Align=Right><A Href="/certsrv"><Font Color=#FFFFFF><LocID ID=locHomeLink><Font Face="Arial" Size=-1><B>Домой</B></Font></LocID></Font></A></TD>
</TR>
</Table>

<P ID=locPageTitle> <B> Ошибка </B>
<!-- Green HR -->

Скажите пажалуйста на самом деле центр сертификации не работает? Или к нему надо обращаться по другому?
 
Ответы:
13.08.2007 0:35:28zbpglhluna
Hello! Good Site! Thanks you! tmhemkkvtn