3

Objective-CとiPhoneアプリのOpenSSLライブラリを使用して、証明書署名要求からプログラムでPEMファイルを作成しようとしています。この質問に対するAdriaNavarroの回答に従って、CSR(タイプX509_REQ *)を生成しました。

キーチェーンに保存されたキーを使用してiOSでOpenSSL証明書署名要求を生成する

コンソールに印刷して、CSRが有効であることを確認しました。

以下は、PEMファイル(CertificateSigningRequest.pem)を作成するための私のコードです。最終的に空白のファイル(0バイトでテキストなし)が作成されます。PEM_write_X509_REQを介してファイルに書き込めないなど、何か問題がありますか?(オーガナイザーからアプリフォルダーをダウンロードしてファイルをチェックしていることに注意してください。)

ご協力いただきありがとうございます。追加情報を提供する必要があるかどうかをお知らせください。

- (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

1 に答える 1

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 =)
}
于 2013-02-07T21:14:09.397 に答える