2012-03-15 5 views
2

Я работаю над приложением, в котором я получу открытый ключ для пользователя с нашего сервера. Как только у меня есть это, мне нужно сделать шифрование RSA с помощью открытого ключа. Открытый ключ, полученный с сервера, кодируется Base64.Использование открытого ключа RSA на iOS

Как загрузить открытый ключ в iOS KeyChain, чтобы я мог выполнять с ним криптографические функции RSA? Загрузка сертификата кажется тривиальной, но исходные открытые ключи этого не делают.

ответ

0

Я нашел необходимый код на Apple Site, описывающий, как удалить заголовок ASN.1 из открытого ключа и загрузить его в KeyChain.

+2

Можете ли вы предоставить ссылку на то, что вы нашли? – trojanfoe

+1

Вот ссылка на дискуссию Apple Dev Forum по теме, связанной с попыткой загрузить закрытый ключ: https://devforums.apple.com/message/684705 Загрузка открытых ключей - это просто вопрос переключения kSecAttrKeyClass для указания открытого ключа. –

+0

[Chris Luke] (http://blog.flirble.org/2011/01/05/rsa-public-keyo-openssl-ios/) пишет об этом. – bobobobo

1

Обычный способ транспортировки открытого ключа - внутри сертификата, подписанного каким-либо центром сертификации, чтобы доказать, что он является подлинным.

Или, может быть, вы говорите о открытом ключе ssh? , в этом случае вам понадобится специальное приложение, поддерживающее ssh, чтобы использовать его, эти ключи обычно не сохраняются в цепочке ключей iOS.

+0

К сожалению, сервер хранит все открытые ключи в Bas64 закодированном формате ASN.1. Невозможно изменить сервер, поскольку на него полагается слишком много других существующих клиентов. И поскольку мы не используем ключи для аутентификации, их наличие в сертификатах не требуется. –

+0

сертификат обычно кодируется как закодированный как base64 как открытый кодированный x509 открытый ключ. вы должны проверить, дает ли 'openssl x509 -in yourcert -text' любой читаемый вывод. или иначе может быть 'openssl x509 -in yourcert -inform DER -text' –

4

Это не поддерживается, потому что это "wrong" путь.

«Право» способ использовать a certificate.

К quote "Quinn The Eskimo!".

Это удивительно легко. Вам не нужно добавлять сертификат в цепочку ключей для обработки этого случая. Скорее просто загрузите данные сертификата (то есть содержимое файла .cer) в ваше приложение (вы можете получить это из своего пакета или вне сети), а затем создать сертификат с помощью SecCertificateCreateWithData. Оттуда вы можете извлечь открытый ключ ref, используя объект SecTrust (SecTrustCreateWithCertificates, SecTrustEvaluate - вы можете игнорировать полученный SecTrustResultType - и SecTrustCopyPublicKey). И оттуда вы можете шифровать и проверять использование API-интерфейсов SecKey (SecKeyEncrypt, SecKeyRawVerify).

Учебное пособие по how to create a self-signed certificate is here.

Основные шаги:

#Make the -----RSA PRIVATE KEY----- file in PEM format 
openssl genrsa -out privKey.pem 2048 

#Make the -----CERTIFICATE REQUEST----- 
openssl req -new -key privKey.pem -out certReq.pem 

#Make the actual -----CERTIFICATE----- 
openssl x509 -req -days 30 -in certReq.pem -signkey privKey.pem -out certificate.pem 

#Make the DER certificate.crt file from the certificate.pem 
openssl x509 -outform der -in certificate.pem -out certificate.cer 

Если двойной щелчок, что .cer на компьютере Mac, он предложит импортировать его в связку ключей.

Ресурсы:

+0

Учитывая, что то, что у меня было в то время, было открытым открытым ключом, работа была единственным вариантом. Не было сертификата, который я мог бы использовать для его загрузки. В конечном итоге мы включили открытый ключ в сертификат для других целей. –

+0

API обеспечивает, как он думает, что вы должны делать безопасность с помощью методов, которые он предоставляет. – bobobobo

Смежные вопросы