Je suis très nouveau à android et java à la fois, donc j'espère que je manque quelque chose de facile ici. Tout ce que je veux faire est de créer une simple demande de signature de certificat PKCS10 . J'ai un code qui compilera et course sur ma boîte ubuntu (java-6-openjdk), mais jette un pointeur NULL exception dans l'émulateur Android:PKCS10CertificationDemande de création sur android
KeyPair myKeyPair = KeyPairGenerator.getInstance("RSA").generateKeyPair();
X500Principal subject = new X500Principal("CN=Test V3 Certificate");
PKCS10CertificationRequest csr = new PKCS10CertificationRequest
("SHA1withRSA",
subject,
myKeyPair.getPublic(),
null,
myKeyPair.getPrivate()
);
byte[] outBytes = csr.getEncoded();
return new String(outBytes);
Dans le débogueur, je peux voir que j'ai apparemment construit un PKCS10CertificationRequest, mais je ne peux rien faire avec (comme getEncoded() ou même toString()) sans erreur. Quand j'appelle getEncoded() il échoue sur l'émulateur android ; c'est la trace de la pile:
06-22 04:41:06.143: WARN/System.err(337): java.lang.NullPointerException: obj == null
06-22 04:41:06.213: WARN/System.err(337): at org.bouncycastle.asn1.ASN1Collection.addObject(ASN1Collection.java:95)
06-22 04:41:06.353: WARN/System.err(337): at org.bouncycastle.asn1.DERSequence.<init>(DERSequence.java:34)
06-22 04:41:06.433: WARN/System.err(337): at org.bouncycastle.asn1.x509.AlgorithmIdentifier.toASN1Object(AlgorithmIdentifier.java:
124)
06-22 04:41:06.453: WARN/System.err(337): at org.bouncycastle.asn1.ASN1Encodable.getDERObject(ASN1Encodable.java:
77)
06-22 04:41:06.483: WARN/System.err(337): at org.bouncycastle.asn1.DEROutputStream.writeObject(DEROutputStream.java:
74)
06-22 04:41:06.523: WARN/System.err(337): at org.bouncycastle.asn1.DERSequence.encode(DERSequence.java:70)
06-22 04:41:06.544: WARN/System.err(337): at org.bouncycastle.asn1.DEROutputStream.writeObject(DEROutputStream.java:
74)
06-22 04:41:06.593: WARN/System.err(337): at org.bouncycastle.jce.PKCS10CertificationRequest.getEncoded(PKCS10CertificationRequest.java:
443)
Je l'ai essayé avec les deux niveaux de l'API 7 et 8. Je sais qu'il ya une tonne d'autres détails que je pouvais poster sur les versions de divers composants de mon système. Comme je l'ai dit, je suis nouveau à ce sujet, donc maintenant Je suis plus à la recherche d'une direction à entrer que nécessairement une réponse finale .
Merci beaucoup,
Adam Mackler
Merci pour votre réponse, ZZ. Pouvez-vous me dire si ce changement que vous suggérez - en ajoutant le deuxième argument nul - a fonctionné pour vous sur la plate-forme android et si oui quelle version? –
Le changement est de supprimer null, pas ajouter. Cela a été fait sur J2SE 5, pas sur Android. Ce bug existe depuis un moment. Je doute que la version d'Andoid soit importante. –
Ah, oui, vous l'avez dit. Ma faute. Et votre solution semble fonctionner! Je pense que ce qui m'a égaré (en plus de ne pas lire attentivement), c'est que les sources bouncycastle les plus récentes ont changé cette valeur null pour une instance de DERNull (appelée INSTANCE). Et les sources Android ont fait la même chose, mais lui ont donné un nom différent (THE_ONE). Je ne pensais même pas que ça ne marcherait pas, mais apparemment c'est le cas. Merci beaucoup d'avoir pris le temps de partager vos connaissances. Vous avez été très utile. –