如何在CC++Objective-C中计算X.509证书的SHA-1指纹?

如何在CC++Objective-C中计算X.509证书的SHA-1指纹?,第1张

概述背景: 我正在编写一个客户端实用程序,它能够使用SSL / TLS连接到远程服务器.客户端使用OpenSSL执行SSL / TLS事务,我希望允许用户指定用于签署服务器证书的授权CA Certs(在自签名证书或私有CA设置的情况下).我计划使用cert的指纹,通用名称和有效日期,以允许用户快速查看客户端用于验证服务器的证书. 题: 如何使用C/C++ / Objective-C计算存储在PEM文件 背景:

我正在编写一个客户端实用程序,它能够使用SSL / TLS连接到远程服务器.客户端使用OpenSSL执行SSL / TLS事务,我希望允许用户指定用于签署服务器证书的授权CA Certs(在自签名证书或私有CA设置的情况下).我计划使用cert的指纹,通用名称和有效日期,以允许用户快速查看客户端用于验证服务器的证书.

题:

如何使用C/C++ / Objective-C计算存储在PEM文件中的X509证书的SHA1哈希/指纹?

经过几天的搜索和实验,我找到了一个解决方案并将其作为答案发布,但我欢迎更好或更正确的解决方案.

解决方法 我在下面发现产生与上面相同的输出:
+(NSData *)sha1:(SecCertificateRef) cert {    // fingerprint is over canonical DER rep.    CFDataRef data = SecCertificatecopyData(cert);    NSData * out = [[NSData dataWithBytes:CFDataGetBytePtr(data) length:CFDataGetLength(data)] sha1Digest];    CFRelease(data);    return out;}

它在目标C中有点短.它需要NSData / Nsstring的以下扩展,但要使格式接近netscape,OSX或windows.

- (NSData *)md5Digest{    unsigned char result[CC_MD5_DIGEST_LENGTH];    CC_MD5([self bytes],(CC_LONG)[self length],result);    return [NSData dataWithBytes:result length:CC_MD5_DIGEST_LENGTH];}- (NSData *)sha1Digest{    unsigned char result[CC_SHA1_DIGEST_LENGTH];    CC_SHA1([self bytes],result);    return [NSData dataWithBytes:result length:CC_SHA1_DIGEST_LENGTH];}- (Nsstring *)hexStringValue{    NSMutableString *stringBuffer = [NSMutableString stringWithCapacity:([self length] * 2)];    const unsigned char *dataBuffer = [self bytes];    int i;    for (i = 0; i < [self length]; ++i)    {        [stringBuffer appendFormat:@"%02lx",(unsigned long)dataBuffer[i]];    }    return [stringBuffer copy];}- (Nsstring *)hexColonSeperatedStringValue{    return [self hexColonSeperatedStringValueWithCAPItals:YES];}- (Nsstring *)hexColonSeperatedStringValueWithCAPItals:(BOol)cAPItalize {    NSMutableString *stringBuffer = [NSMutableString stringWithCapacity:([self length] * 3)];    const unsigned char *dataBuffer = [self bytes];    Nsstring * format = cAPItalize ? @"%02X" : @"%02x";    int i;    for (i = 0; i < [self length]; ++i)    {        if (i)             [stringBuffer appendString:@":"];        [stringBuffer appendFormat:format,(unsigned long)dataBuffer[i]];    }    return [stringBuffer copy];}
总结

以上是内存溢出为你收集整理的如何在C/C++ / Objective-C中计算X.509证书的SHA-1指纹?全部内容,希望文章能够帮你解决如何在C/C++ / Objective-C中计算X.509证书的SHA-1指纹?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1236523.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存