Как получить PublicKey из AsymmetricCipherKeyPair, а не publickeycipher параметров? - PullRequest
5 голосов
/ 12 марта 2012

Я генерирую пару ключей на платформе, используя пакет Bouncy Castle .

SecureRandom random = new SecureRandom();

ECKeyPairGenerator pGen = new ECKeyPairGenerator();

ECKeyGenerationParameters genParam = new ECKeyGenerationParameters(params,random);

pGen.init(genParam);

AsymmetricCipherKeyPair pair = pGen.generateKeyPair();

Здесь pair имеет тип AsymmetricCipherKeyPair.И мне нужно создать сертификат X509V1 на сервере, используя эту пару.Но setPublicKey(PublicKey pubkey) Сертификата X509 принимает только объекты типа PublicKey.Поэтому мне нужно получить PublicKey с AsymmetricCipherKeyPair на сервере.Но я получаю ECPublicKeyParameters, что не принимается в методе * 1013. *

Итак, мое требование здесь состоит в том, чтобы получить PublicKey от AsymmetricCipherKeyPair.

1 Ответ

3 голосов
/ 16 мая 2012

Самый простой способ - использовать BouncyCastle как JavaCryptoProvider:

  1. Создать KeyPair

    KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "BC");
    ECGenParameterSpec ecsp = new ECGenParameterSpec(keyAlg);
    kpg.initialize(ecsp);
    KeyPair kp = kpg.generateKeyPair();
    
  2. Марка X509v1 Cert

    X509V1CertificateGenerator certGen = new X509V1CertificateGenerator();
    X500Principal dnName = new X500Principal("CN=C3");
    Calendar c = Calendar.getInstance();
    c.add(Calendar.YEAR, 10);
    certGen.setSerialNumber(keyId);
    certGen.setIssuerDN(dnName);
    certGen.setNotBefore(new Date());
    certGen.setNotAfter(c.getTime());
    certGen.setSubjectDN(dnName);                      
    certGen.setPublicKey(keyPair.getPublic());
    certGen.setSignatureAlgorithm("SHA256withECDSA");
    certGen.generate(keyPair.getPrivate(), "BC");
    
...