J'utilise OpenSSL pour générer DSA
publiques et privées clés et exécuter les commandes suivantes:Impossible d'obtenir lire les clés DSA à partir de fichiers .pem
openssl dsaparam -out dsaparam.pem 1024
openssl gendsa -out dsaprivkey.pem dsaparam.pem
openssl req -new -x509 -key dsaprivkey.pem -out dsacert.pem
Et utiliser les deux méthodes suivantes pour charger ces clés:
public static PrivateKey loadPrivateKey() throws Exception {
String privateKeyPEM = FileUtils.readFileToString(new File("/Keys/dsaprivkey.pem"), StandardCharsets.UTF_8);
// strip of header, footer, newlines, whitespaces
privateKeyPEM = privateKeyPEM
.replace("-----BEGIN DSA PRIVATE KEY-----", "")
.replace("-----END DSA PRIVATE KEY-----", "")
.replaceAll("\\s", "");
// decode to get the binary DER representation
byte[] privateKeyDER = Base64.getDecoder().decode(privateKeyPEM);
KeyFactory keyFactory = KeyFactory.getInstance("DSA");
PrivateKey privateKey = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(privateKeyDER));
return privateKey;
}
public static PublicKey loadPublicKey() throws Exception {
String publicKeyPEM = FileUtils.readFileToString(new File("/Keys/dsacert.pem"), StandardCharsets.UTF_8);
// strip of header, footer, newlines, whitespaces
publicKeyPEM = publicKeyPEM
.replace("-----BEGIN CERTIFICATE-----", "")
.replace("-----END CERTIFICATE-----", "")
.replaceAll("\\s", "");
// decode to get the binary DER representation
byte[] publicKeyDER = Base64.getDecoder().decode(publicKeyPEM);
KeyFactory keyFactory = KeyFactory.getInstance("DSA");
PublicKey publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(publicKeyDER));
return publicKey;
}
Cependant, je ne peux pas lire ni publique ni clé privée.
Lorsque je tente de lire la clé publique, je reçois:
java.security.spec.InvalidKeySpecException: Inappropriate key specification: IOException: ObjectIdentifier() -- data isn't an object ID (tag = -96)
Et quand je tente de lire la clé privée, je reçois:
Exception in thread "main" java.security.spec.InvalidKeySpecException: Inappropriate key specification: IOException : algid parse error, not a sequence
Si quelqu'un fait face à la même situation, je vais vraiment apprécier toute aide en ce qui concerne ce problème
Vous devriez ajouter une de vos clés publiques ou privées. Je soupçonne que c'est la différence entre une "clé publique" et une "information de clé publique soumise", où cette dernière a l'algorithme et l'OID. Voir aussi [Comment lire le fichier .pem pour obtenir la clé publique et privée] (https://stackoverflow.com/q/11787571/608639), [Charger la clé publique RSA du fichier] (https://stackoverflow.com/q/11410770/608639), [PublicKey du fichier PEM sur android, java] (https://stackoverflow.com/q/45464949/608639), etc. Il suffit d'échanger RSA pour DSA. – jww