0

#import クラスを使用して証明書を解析し、有効期限と開始日を取得しています 次の関数を使用しています

static NSDate *CertificateGetExpiryDate(X509 *certificateX509)
{
    NSDate *expiryDate = nil;

    if (certificateX509 != NULL) {
        ASN1_TIME *certificateExpiryASN1 = X509_get_notAfter(certificateX509);
        if (certificateExpiryASN1 != NULL) {
            ASN1_GENERALIZEDTIME *certificateExpiryASN1Generalized = ASN1_TIME_to_generalizedtime(certificateExpiryASN1, NULL);
            if (certificateExpiryASN1Generalized != NULL) {
                unsigned char *certificateExpiryData = ASN1_STRING_data(certificateExpiryASN1Generalized);

                // ASN1 generalized times look like this: "20131114230046Z"
                //                                format:  YYYYMMDDHHMMSS
                //                               indices:  01234567890123
                //                                                   1111
                // There are other formats (e.g. specifying partial seconds or
                // time zones) but this is good enough for our purposes since
                // we only use the date and not the time.
                //
                // (Source: http://www.obj-sys.com/asn1tutorial/node14.html)

                NSString *expiryTimeStr = [NSString stringWithUTF8String:(char *)certificateExpiryData];
                NSDateComponents *expiryDateComponents = [[NSDateComponents alloc] init];

                expiryDateComponents.year   = [[expiryTimeStr substringWithRange:NSMakeRange(0, 4)] intValue];
                expiryDateComponents.month  = [[expiryTimeStr substringWithRange:NSMakeRange(4, 2)] intValue];
                expiryDateComponents.day    = [[expiryTimeStr substringWithRange:NSMakeRange(6, 2)] intValue];
                expiryDateComponents.hour   = [[expiryTimeStr substringWithRange:NSMakeRange(8, 2)] intValue];
                expiryDateComponents.minute = [[expiryTimeStr substringWithRange:NSMakeRange(10, 2)] intValue];
                expiryDateComponents.second = [[expiryTimeStr substringWithRange:NSMakeRange(12, 2)] intValue];

                NSCalendar *calendar = [NSCalendar currentCalendar];
                expiryDate = [calendar dateFromComponents:expiryDateComponents];

                [expiryDateComponents release];
            }
        }
    }

    return expiryDate;
}

しかし、共通名、バージョン、秘密鍵などの証明書の詳細全体を解析したい.

どうすればそれを手に入れることができるか教えてください

X509_NAME *issuerX509Name = X509_get_issuer_name(certificateX509); X509_NAME *subjectX509Name = X509_get_subject_name(certificateX509);

上記の 2 つの関数を使用して問題名と件名を取得していますが、これを Nsstring 形式に変換したいと考えています。

次のリクエストで X509_NAme を Nsstring に変換する方法を教えてください。これらの名前をリクエストに追加する必要があります。

前もって感謝します

4

1 に答える 1

1

NSstring についてはわかりませんが、この方法で X509_NAME * から C スタイルの文字列を取得できます。

int const nid = OBJ_txt2nid("commonName");

if (nid != NID_undef)
{
    int result = X509_NAME_get_text_by_NID(issuerX509Name, nid, NULL, 0);

    if (result > 0)
    {
        *cn = malloc((size_t)result + 1);

        if (*cn != NULL)
        {
            result = X509_NAME_get_text_by_NID(issuerX509Name, nid, cn, result+1);
于 2013-02-01T13:51:14.727 に答える