का उपयोग कर X509 प्रमाण पत्र जेनरेट करना मैं ऐप इंजन पर चलाने के लिए JXTA पोर्ट करने का प्रयास कर रहा हूं। यह देखते हुए कि बाउंसीकास्टल "बीसी" प्रदाता अभी तक ऐप इंजन पर समर्थित नहीं है, मुझे सफेद-सूचीबद्ध कक्षाओं का उपयोग करके X509 प्रमाण पत्र उत्पन्न करने के लिए मौजूदा JXTA कोड को पोर्ट करना होगा। क्रिप्टो का मेरा ज्ञान न्यूनतम है और मुझे यकीन नहीं है कि जो भी मैं पूरा करने की कोशिश कर रहा हूं वह भी संभव है। विधि मेंबाउंसीकैसल X509v3CertificateBuilder
public static class IssuerInfo {
public X509Certificate cert; // subject Cert
public PrivateKey subjectPkey; // subject private key
public X509Certificate issuer; // issuer Cert
public PrivateKey issuerPkey; // issuer private key
}
:
वहाँ एक सहायक वर्ग जो java.security.cert.X509Certificate शामिल है: यहाँ JXTA परियोजना से PSEUtils.java से मूल कोड है :
public static IssuerInfo genCert(X500Principal subject, KeyPair keypair, IssuerInfo issuerinfo)
मैं के रूप में इस विषय में गुजर रही है:
012,351,641 (मूल कोड से) के रूप मेंnew X500Principal("CN="+useCN)
कुंजीयुग्म:
KeyPairGenerator g = KeyPairGenerator.getInstance("RSA");
g.initialize(1024, UTILS.srng);
KeyPair keypair = g.generateKeyPair();
और jxta कोडित IssuerInfo।
अब जब से मैं bouncycastle.jce पैकेज में नहीं खींच पा रहा हूं, मुझे X509 प्रिंसिपल और X509V3CertificateGenerator कोड को हटाना पड़ा है जो JXTA उपयोग करता है और इसे कार्यान्वित करने के लिए इसे बदलने का प्रयास करता है जो GAE प्रतिबंधों का अनुपालन करता है। org.bouncycastle.X509.X509v3CertificateBuilder का उपयोग कर जेनक्रर्ट विधि के लिए वर्तमान में मेरे पास क्या है।
SubjectPublicKeyInfo subPubKeyInfo = SubjectPublicKeyInfo.getInstance(keypair.getPublic().getEncoded());
X509v3CertificateBuilder v3CertGen = new X509v3CertificateBuilder(
new X500Name(issuer.getName()),
BigInteger.ONE,
today, until,
new X500Name(subject.getName()),
subPubKeyInfo);
समस्या यह है कि मैं keypair.getPublic().getEncoded()
SubjectPublicKeyInfo.getInstance()
विधि के साथ काम करने के लिए नहीं मिल सकता है। कारखाने में अज्ञात वस्तु: फेंकता java.lang.IllegalArgumentException [बी
सार्वजनिक कुंजी दिखाई देता है निरीक्षण पर बसा होने के लिए:
Sun RSA public key, 1024 bits
modulus: 117521430893506212334140912845641570591161279468597426442875306202350445904550279678434051874985419676760802566018092318362676224355315431299979507080364677679613392086245588766565617009250512996843008784370448997729071786062596049780632058501646041736216482596596901215941577208285499619376322050871534546271
public exponent: 65537
मैं इतना नीचे दिए गए लिंक जो इस कोड काम कर रहे दर्शाता है मिल गया है:
कन्वर्ट करने के लिए genCert नीचे है, लेकिन किसी कारण से, मैं इनकोडिंग सार्वजनिक कुंजी से SubjectPublicKeyInfo बनाने अतीत नहीं मिल सकता है मेरे प्रयास?
किसी भी मदद की बहुत सराहना की जाती है। link:
public static IssuerInfo genCert(X500Principal subject, KeyPair keypair, IssuerInfo issuerinfo) {
IssuerInfo info = new IssuerInfo();
try {
// set up issuer
PrivateKey signer;
X500Principal issuer;
if (null == issuerinfo) { // self-signed root cert
signer = keypair.getPrivate();
issuer = new X500Principal(subject.getEncoded());
} else { // issuer signed service sert
signer = issuerinfo.subjectPkey;
X500Principal issuer_subject = issuerinfo.cert.getSubjectX500Principal();
issuer = new X500Principal(issuer_subject.getEncoded());
}
// set validity 10 years from today
Date today = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(today);
cal.add(Calendar.YEAR, 10);
Date until = cal.getTime();
SubjectPublicKeyInfo subPubKeyInfo = SubjectPublicKeyInfo.getInstance(keypair.getPublic().getEncoded());
//**Can't get here so i'm not sure if the rest of this works?**
AlgorithmIdentifier sigAlgId = new DefaultSignatureAlgorithmIdentifierFinder().find("SHA1withRSA");
AlgorithmIdentifier digAlgId = new DefaultDigestAlgorithmIdentifierFinder().find(sigAlgId);
RSAPrivateCrtKeyParameters cps = (RSAPrivateCrtKeyParameters) keypair.getPrivate();
ContentSigner sigGen = new BcRSAContentSignerBuilder(sigAlgId, digAlgId).build(cps);
X509CertificateHolder certHolder = v3CertGen.build(sigGen);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
// Read user Certificate
InputStream is1 = new ByteArrayInputStream(certHolder.getEncoded());
X509Certificate eeCert = (X509Certificate) cf.generateCertificate(is1);
is1.close();
आप इनमें से इस वर्ग के रूप में कई अपडेट कर लें कर सके बीसी में विधियों/कक्षाओं को अब हटा दिया गया है? – Reddy
बीसी अब ऐप इंजन में समर्थित है इसलिए इसकी आवश्यकता नहीं है। –
@ChukDiesel हम में से उन लोगों के बारे में ऐप इंजन का उपयोग नहीं कर रहे हैं? कृप्या? – Phil