2016-11-07 22 views
7

मैं एक एंड्रॉइड प्रोजेक्ट विकसित कर रहा हूं।मेरे मामले में प्रोग्रामिंग रूप से X509 प्रमाणपत्र स्थापित करें

-----BEGIN CERTIFICATE----- 
MIIEczCCA1ugAwIBAgIBADANBgkqhkiG9w0BAQQFAD..AkGA1UEBhMCR0Ix 
EzARBgNVBAgTClNvbWUtU3RhdGUxFDASBgNVBAoTC0..0EgTHRkMTcwNQYD 
VQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5IENlcn..XRpb24gQXV0aG9y 
...MANY LINES... 
It8una2gY4l2O//on88r5IWJlm1L0oA8e4fR2yrBHX..adsGeFKkyNrwGi/ 
7vQMfXdGsRrXNGRGnX+vWDZ3/zWI0joDtCkNnqEpVn..HoX 
-----END CERTIFICATE----- 

मैं द्वारा X509Certificate को पीईएम स्ट्रिंग ऊपर परिवर्तित (मैं CERT_STR नामक एक चर करने के लिए प्रमाण पत्र स्ट्रिंग ऊपर सौंपा):

byte[] certBytes = CERT_STR.getBytes(); 
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); 
InputStream certIs = new ByteArrayInputStream(certBytes); 
// now I get the X509 certificate from the PEM string 
X509Certificate certificate = (X509Certificate) certificateFactory.generateCertificate(certIs); 

फिर, मैं कोशिश मैं एक पीईएम प्रमाणपत्र स्ट्रिंग है प्रमाण पत्र प्रोग्रामेटिक रूप से स्थापित करने के लिए:

Intent intent = KeyChain.createInstallIntent(); 
// because my PEM only contains a certificate, no private key, so I use EXTRA_CERTIFICATE 
intent.putExtra(KeyChain.EXTRA_CERTIFICATE, certificate.getEncoded()); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(intent); 

कब मैं अपना ऐप चलाता हूं, मुझे लगता है कि सिस्टम डायलॉग "एक्स्ट्रेक्टिंग ..." कह रहा है, मुझे पता है कि सिस्टम मेरा प्रमाणपत्र निकाला जा रहा है, लेकिन वह संवाद हर समय कह रहा है "निकालने ..."।

क्यों? प्रमाण पत्र स्थापित करने के लिए मेरे कोड में मैं गलत कहां हूं?

+0

आपके पास कोड के लिए एक बाइनरी प्रमाण पत्र की आवश्यकता है, न कि बेस 64 एन्कोडेड। – Robert

+0

@ रॉबर्ट, मैं आपके शब्दों को काफी समझ नहीं पा रहा हूं, मेरे कोड का कौन सा हिस्सा बेस 64 एन्कोडिंग का उपयोग करता है? –

+0

BEGIN और END CERTIFICATE के बीच का हिस्सा बेस 64 एन्कोडेड प्रमाणपत्र है। X.50 9 सर्टिफिकेट फैक्ट्री को AFAIR को बाइनरी प्रमाणपत्र की आवश्यकता होती है। – Robert

उत्तर

3

शायद आप ठीक से बनाए गए X509 प्रमाणपत्र का उपयोग नहीं कर रहे हैं। मेरी अंत पर काम किया के बाद और मैं किसी भी "निकाल रहा है ..." संवाद (Nexus 5X, एंड्रॉयड 7.0) नहीं देखा था:

String x509cert = "-----BEGIN CERTIFICATE-----\n" + 
     "MIICrjCCAhegAwIBAgIJAO9T3E+oW38mMA0GCSqGSIb3DQEBCwUAMHAxCzAJBgNV\n" + 
     "BAYTAlVaMREwDwYDVQQHDAhUYXNoa2VudDENMAsGA1UECgwERWZpcjEQMA4GA1UE\n" + 
     "CwwHSVQgZGVwdDEQMA4GA1UEAwwHZWZpci51ejEbMBkGCSqGSIb3DQEJARYMaG9z\n" + 
     "dEBlZmlyLnV6MB4XDTE2MTExMDA4MjIzMFoXDTE2MTIxMDA4MjIzMFowcDELMAkG\n" + 
     "A1UEBhMCVVoxETAPBgNVBAcMCFRhc2hrZW50MQ0wCwYDVQQKDARFZmlyMRAwDgYD\n" + 
     "VQQLDAdJVCBkZXB0MRAwDgYDVQQDDAdlZmlyLnV6MRswGQYJKoZIhvcNAQkBFgxo\n" + 
     "b3N0QGVmaXIudXowgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL60mG0Gpl7s\n" + 
     "3qMnZcURB1xk5Qen6FN0+AJB5Z/WHA50n1MUkXNY28rkEYupkxpfEqR+/gXgBUAm\n" + 
     "FACA3GSdoHMMY1kdeAzxsYbBEbtGKHICF/QFGTqScWmI6uBUwzsLDLv1ELef/zEY\n" + 
     "Ru/krXtNh8ZNYyfwVKyZaB9+3M2yOqATAgMBAAGjUDBOMB0GA1UdDgQWBBS1nH3O\n" + 
     "ecLDrIZLZ/f1WsNL/xtuEzAfBgNVHSMEGDAWgBS1nH3OecLDrIZLZ/f1WsNL/xtu\n" + 
     "EzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4GBAGzjJnXODvF9UHBKHAUF\n" + 
     "kzisr78Og5BrKyAgdnjH196Jg4MO7RNJdQAmuAIk9aBB/jvAiznhhbcD3mYImH+h\n" + 
     "F0Scewk5m736ydGhkcUpmxA5ye1hajjs9V7PQD2O4a8rNJSlJjiWRWSqxTfH79Ns\n" + 
     "B7x2HND9LU/iz02ugGJ8vwg8\n" + 
     "-----END CERTIFICATE-----\n"; 
Intent intent = KeyChain.createInstallIntent(); 
intent.putExtra(KeyChain.EXTRA_CERTIFICATE, x509cert.getBytes()); 
startActivity(intent); 

ऊपर प्रमाण पत्र बनाने के लिए, मैं निम्नलिखित चरणों का प्रयोग किया जाता है (Generating Keys and Certificates for SSO के आधार पर):

$ openssl genrsa -out rsaprivkey.pem 1024 

$ openssl req -new -x509 -key rsaprivkey.pem -out rsacert.pem 

$ ls 
rsacert.pem rsaprivkey.pem 

तो मैं बस कॉपी/cat rsacert.pem से x509cert के उत्पादन चिपकाया।

उम्मीद है कि इससे मदद मिलती है।

+0

@ रॉबर्ट हेड-अप के लिए धन्यवाद। यह प्रदर्शित करना था कि प्रमाण पत्र स्थापना ठीक से उत्पन्न X509 प्रमाणपत्र के साथ काम कर रही है। फिर भी, ऊपर दिए गए उत्तर को अपडेट किया गया। – ozbek

+0

@ozbek, क्या आपने एंड्रॉइड 7 नौगेट डिवाइस में परीक्षण किया है? मुझे एंड्रॉइड 7 में यह समस्या है। –

+0

@ लीम.फिन: हाँ, एंड्रॉइड 7.0 – ozbek

संबंधित मुद्दे