2013-02-07 56 views
3

我想在iPhone應用程序中使用Objective-C和OpenSSL庫以編程方式從證書籤名請求中創建PEM文件。我已經按照阿德里亞納瓦羅的回答這個問題產生的(類型X509_REQ *)的企業社會責任:在Objective-C中以編程方式創建.pem文件?

Generating an OpenSSL Certificate Signing Request in iOS with Keychain stored keys

我已經證實,CSR是打印出來到控制檯有效。

下面是我創建PEM文件(CertificateSigningRequest.pem)的代碼。它最終創建一個空白文件(0字節並且沒有文本)。我做錯了什麼,以至於無法通過PEM_write_X509_REQ寫入文件? (請注意,我通過Organizer下載應用程序文件夾來檢查文件。)

在此先感謝您提供的任何幫助,並告知我是否應提供其他信息。

- (void)createPemFileWithCertificateSigningRequest:(X509_REQ *)certSigningRequest 
{ 
    //delete existing PEM file if there is one 
    [self deletePemFile]; 

    //create empty PEM file 
    NSString *pemFilePath = [self pemFilePath]; 
    if (![[NSFileManager defaultManager] createFileAtPath:pemFilePath contents:nil attributes:nil]) 
    { 
     NSLog(@"Error creating file for PEM"); 
     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error creating file for PEM" message:[NSString stringWithFormat:@"Could not create file at the following location:\n\n%@", pemFilePath] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alertView show]; 
     return; 
    } 

    //get a FILE struct for the PEM file 
    NSFileHandle *outputFileHandle = [NSFileHandle fileHandleForWritingAtPath:pemFilePath]; 
    FILE *pemFile = fdopen([outputFileHandle fileDescriptor], "w"); 

    //write the CSR to the PEM file 
    PEM_write_X509_REQ(pemFile, certSigningRequest); 
} 

- (NSString *)pemFilePath 
{ 
    NSString *documentsFolder = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    return [documentsFolder stringByAppendingPathComponent:@"CertificateSigningRequest.pem"]; 
} 

回答

4

事實證明,我的問題是,在寫入文件後我沒有關閉文件。將最後一行加入到這個方法中有訣竅。

- (void)createPemFileWithCertificateSigningRequest:(X509_REQ *)certSigningRequest 
{ 
    //... 

    //write the CSR to the PEM file 
    PEM_write_X509_REQ(pemFile, certSigningRequest); 

    //close the file 
    fclose(pemFile); //THIS MAKES EVERYTHING WORK =) 
} 
+0

我發現CSR的所有解決方案都與RSA有關,請問EC可以通過OpenSSL來幫助我找到CSR嗎? – Aleem

相關問題