2014-10-09 2 views
2

Я пытаюсь создать запрос сертификата программным способом (который я должен отправить на сервер) в iOS am OSX без использования openSSL. Мне удалось создать пару ключей RSA, но я не могу сделать все остальное. У меня есть код, который делает именно то, что мне нужно, но он написан на Java, и мне интересно, есть ли кто-нибудь, кто поможет мне перевести это на цель c.ios создать запрос сертификата программно

Вот код Java:

 test.generateKeys(); // generate RSA key pair 

     PrivateKey privateKey = test.keys.getPrivate(); 
     PublicKey publicKey = test.keys.getPublic(); 

     SecureRandom sr = new SecureRandom(); 
     String token = "123456"; // dummy token 
     String uuid = "4670ff33-d9f7-4026-957d-25c00e4dec54"; // dummy uuid 

     // with Bouncy Castle 
     ContentSigner signGen = new JcaContentSignerBuilder("SHA1withRSA").setSecureRandom(sr).build(privateKey); 
     X500Principal subject = new X500Principal("O=" + token + ", CN=" + uuid); 
     PKCS10CertificationRequestBuilder builder = new JcaPKCS10CertificationRequestBuilder(subject, publicKey); 
     PKCS10CertificationRequest request = builder.build(signGen); 

     String bc = Hex.encodeHexString(request.getEncoded()); 
     System.out.println(PEMtoString(request)); 

Я не очень хорошо в криптографии и документации для крипто слоя яблока развивается довольно беден документирована, поэтому я немного потерял здесь. Я наткнулся на множество подобных образцов, но всегда что-то не хватает. Thx заранее.

+0

Очень рекомендуем вам использовать OpenSSL. Если нет, будьте готовы к нескольким неделям усилий. См. Http://stackoverflow.com/questions/14741512/creating-pem-file-programmatically-in-objective-c –

+0

Я бы использовал openSSl, но, насколько я понимаю, Apple обескураживает, чтобы разработчики использовали openSSL для того, чтобы вести новый криптографический слой, который они развиваются, поэтому я не хочу программировать что-то, что было бы отвергнуто в будущем или что-то подобное. как это – AntonijoDev

ответ

5

В случае, если кто-то натыкается на ту же проблему, вот решение, использующее обычный криптографический слой Apples (без openSSL).

https://github.com/ateska/ios-csr

Нет необходимости в течение нескольких недель кодирования только простой включать.

SCCSR *sccsr = [[SCCSR alloc] init]; 
    sccsr.commonName = @"some name"; 
    sccsr.organizationName = @"some organisation"; 
// // aditional data you can set 
// sccsr.countryName = @""; 
// sccsr.organizationalUnitName = @""; 
// sccsr.subjectDER = nil; 
// // 
//  
    NSData *certificateRequest = [sccsr build:pPublicKey privateKey:privateKey]; 

    NSString *str = [certificateRequest base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; 

    NSString *strCertificateRequest = @"-----BEGIN CERTIFICATE REQUEST-----\n"; 
    strCertificateRequest = [strCertificateRequest stringByAppendingString:str]; 
    strCertificateRequest = [strCertificateRequest stringByAppendingString:@"\n-----END CERTIFICATE REQUEST-----\n"]; 

SCCSR.h -> ЗАГРУЖЕНЫ С ПРЕДОСТАВЛЕННОЙ LINK

Смежные вопросы