在ios上使用不受信任的证书加密数据

时间:2012-03-20 17:19:08

标签: ios security encryption cryptography

我正在iPhone中开发一个应用程序,我连接到webService。发送我要加密的用户的密码。为此,我创建了一对公钥/私钥,私钥在服务器上解密密码,公共在iPhone的应用程序上加密密码。我创建了这对:

$ openssl genrsa -out private.pem 1024
$ openssl rsa -in private.pem -out public.pem -outform PEM -pubout

当我加密消息时,我使用此代码创建SecCertificateRef:

    NSData *certData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"wspublickey" ofType:@"pem"]];
SecCertificateRef cert = SecCertificateCreateWithData(kCFAllocatorDefault, (__bridge CFDataRef)certData);

在这个指令cert == nil之后,我花了很多时间试图理解它的帖子(我理解非对称密钥的话,但我完全没有经验实现它)。我的结论是我的证书不受信任,这就是SecCertificateCreateWithData返回nil的原因。我的问题是,如果我不想支付可靠的证书,我应该如何加密我的数据?很抱歉我对使用rya公钥证书加密数据的实现了解不多但是我迷路了,我不知道应该如何解决这个问题。谢谢你的帮助。发帖后:

  

"untrusted server certificate" on iPhone   http://omegadelta.net/2011/01/17/ios-untrusted-server-certificate/   http://lists.apple.com/archives/apple-cdsa/2009/Jun/msg00012.html

我想要的只是命令:

$ openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl

3 个答案:

答案 0 :(得分:1)

最后我找到了我要找的东西。 CodeInChaos所说的我需要的是我的自签名证书。有了它我的代码工作正常。为此,我使用此命令:

openssl req -x509 -out public_key.der -outform der -new -newkey rsa:1024 -keyout private_key.pem -days 3650

我发现这篇文章非常有用:

  

http://blog.iamzsx.me/show.html?id=155002

它回答了很多问题。不是英文但谷歌翻译得好,所以这不是一个大问题。我希望这可以帮助有同样问题的人。

答案 1 :(得分:0)

为了安全地执行此操作,您必须使用HTTPS或SSL / TLS。如果您不想为证书支付5美元,则可以使用自签名证书并对公钥进行核心处理。无需建立自己的协议,这是浪费时间。

答案 2 :(得分:0)

问题来自文件格式。 您正在使用PEM而不是DER,它是iOS API SecCertificateCreateWithData( )

的二进制格式