não pôde carregar a chave privada (tipo de dados não reconhecido) ao tentar importar o arquivo pem gerado usando o PKCS8Generator

3

Estou criando um KeyPair com as especificações mencionadas abaixo usando java (KeyPairGenerator)

  1. Formato de chave pública do OpenSSH
  2. Formato DER codificado em Base64
  3. Formato de arquivo de chave pública SSH, conforme especificado em RFC4716

O público gerado é validado e a chave privada é armazenada em um arquivo pem usando PKCS8Generator não é válido.Quando eu tento importar o arquivo pem no puttygen amd recebendo um erro dizendo "não foi possível carregar a chave privada (tipo de dados não reconhecido ) ", Abaixo está o código de exemplo

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(2048, new SecureRandom());
KeyPair kp = kpg.generateKeyPair();
Key publicKey =  kp.getPublic();

String publicKeyEncoded = "---- BEGIN SSH2 PUBLIC KEY ----" + "\n" +
                       new String(Base64.getEncoder().encode(publicKey.getEncoded())) + "\n"+
                           "---- END SSH2 PUBLIC KEY ----";


//Get Private Key and store to pem file.
Key privateKey = kp.getPrivate();
PKCS8Generator encryptorBuilder = new PKCS8Generator((PrivateKey) privateKey);
PEMWriter writer = new PEMWriter(new FileWriter(new File("D:/pk.pem")));
PemObject obj = encryptorBuilder.generate();
writer.writeObject(obj);
writer.flush();
writer.close();

Você pode por favor me ajudar nisso? V

    
por user576748 30.03.2016 / 08:22

1 resposta

3

O PuTTY não suporta o formato PKCS # 8 - apenas as chaves "raw" PEM (PKCS # 1) e SSH.com "RFC4716-like". (Versões recentes também suportam o novo formato "bcrypt" do OpenSSH.)

Em outras palavras, o arquivo precisa ter um dos seguintes cabeçalhos:

  • PuTTY-User-Key-File-2: <key_type> (PuTTY .ppk)
  • -----BEGIN RSA PRIVATE KEY-----
  • -----BEGIN DSA PRIVATE KEY-----
  • -----BEGIN EC PRIVATE KEY-----
  • ---- BEGIN SSH2 ENCRYPTED PRIVATE KEY ---- (SSH.com)
  • -----BEGIN OPENSSH PRIVATE KEY----- (OpenSSH)

Confusamente, as pessoas usam a mesma extensão ".pem" para os PKCS # 1 e PKCS # 8.

(Uma possível razão para a falta de suporte do PuTTYgen é que o ssh-keygen do OpenSSH sempre grava o PKCS # 1, então ninguém precisava do suporte ao PKCS # 8 até agora.)

    
por 30.03.2016 / 10:18

Tags