【问题标题】:iPhone generate X509 certificate from RSA public keyiPhone 从 RSA 公钥生成 X509 证书
【发布时间】:2012-07-17 12:00:20
【问题描述】:

在 iPhone 开发中有没有办法从我的 RSA 公钥 (seckeyref) 生成 X509 证书

或者有谁知道如何将我的公钥传输到 java 服务器?

感谢帕特里克

【问题讨论】:

    标签: iphone certificate rsa exchange-server x509


    【解决方案1】:

    不确定你的意思。如果您的意思是 RSA 是一个完整的证书,那么:

    SecCertificateRef cert = ...
    CFDataRef der = SecCertificateCopyData(cert);
    
    const unsigned char * ptr = CFDataGetBytePtr(der);
    int len = CFDataGetLength(der);
    
    // now write len bytes from ptr to a file, put it in a POST request
    // to the server, etc.
    

    您可以将其写入二进制文件(作为 DER 文件)或转换为 base64 作为 PEM 证书。 Java 会喜欢 DER 文件/格式并在

    中接受它
    FileInputStream certificateStream = new FileInputStream(aboveDerFileOrPost);
    CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
    java.security.cert.Certificate[] certs = {};
    certs = certificateFactory.generateCertificates(certificateStream).toArray();
    certificateStream.close();
    

    某种方式。如果你的意思是你有一个原始的 RSA 公钥——你现在想添加 X509 的东西来使它成为一个证书然后签名——那就是更多的工作。 AFAIK 需要使用 openssl(或者至少我是这样做的)来创建 x509 结构;然后使用 SecTransformExecute() 或 SecKeyRawSign() 进行签名,以免违反密钥存储的安全规则。

    【讨论】:

    • 谢谢!你能告诉我如何从我的公钥(使用 SecKeyGeneratePair 生成的 SecKeyRef)创建 SecCertificateRef 吗?或者这是一个“原始 RSA 公钥”?在 iOS 上生成密钥对并将公钥传输到(java)服务器的常用方法是什么?
    • 这确实是一对原始对 - 它还没有证书信息。不确定您的用例是什么 - 但您可能真的想考虑是否不能全部使用 openssl。因为绕过苹果的限制真的很痛苦。如果你沿着 openssl 路线走——你可以简单地从 openssl 发行版中获取“req.c”;将其剥离并使用它。
    • 这个想法是:客户端拥有带有服务器公钥 (S+) 的 .pem 证书。生成它自己的私有 (C-) 和公共 (C+) 密钥对。并将 C+ 传输到服务器(是否在证书中)。在此密钥交换之后,应加密传输的数据。在黑莓、Windows 手机和 Android 上,这可以正常工作。但在 iPhone 上几乎是不可能的
    • 你想为此使用普通的 SSL/TLS 吗?
    • 公钥应该可以正常传输。有没有办法从我的 SecKeyRef 中检索指数和模数?
    猜你喜欢
    • 1970-01-01
    • 2018-01-27
    • 2017-05-03
    • 1970-01-01
    • 2018-08-03
    • 2014-11-19
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多