Özel anahtar ve ortak anahtarımı, Swift tabanlı iOS uygulamasına SecKeyGeneratePair
işlevini kullanarak oluşturdum.
Sonra, iOS CSR generation kullanarak Sertifika İmzalama İsteği oluşturdum ve sunucum PEM biçiminde sertifika zinciriyle yanıt verdi.
Ben DER-biçimi için aşağıdaki kodu kullanarak PEM-sertifika dönüştürülen: Kullandığım DER verilerden sertifika oluşturmak gerekir, Şimdiİstemci sertifikaları ve kimlikleri iOS'ta
var modifiedCert = certJson.replacingOccurrences(of: "-----BEGIN CERTIFICATE-----", with: "")
modifiedCert = modifiedCert.replacingOccurrences(of: "-----END CERTIFICATE-----", with: "")
modifiedCert = modifiedCert.replacingOccurrences(of: "\n", with: "")
let dataDecoded = NSData(base64Encoded: modifiedCert, options: [])
let certificate = SecCertificateCreateWithData(nil, certDer)
takip ediyor Sorum: Nasıl özel sertifikayı bağlayabilirsiniz Başta yarattığım anahtar ve bu ikisinin de (anahtarlar ve sertifikalar) ait olduğu kimliği aldım?
Belki de anahtarlığa sertifika ekleyin ve SecItemCopyMatching
kullanarak kimliği alın? Söz sunulan prosedür takip SecIdentityRef procedure
Düzenleme:
Anahtarlık sertifika eklemeden, ben sertifika Anahtarlık eklendiğini demektir inanıyoruz durumu yanıtını 0, olsun. Ben kimliğini almaya çalışıyorum ne zaman
let certificate: SecCertificate? = SecCertificateCreateWithData(nil, certDer)
if certificate != nil{
let params : [String: Any] = [
kSecClass as String : kSecClassCertificate,
kSecValueRef as String : certificate!
]
let status = SecItemAdd(params as CFDictionary, &certRef)
print(status)
}
Şimdi, durumunu -25300 (errSecItemNotFound) olsun. Kimliği almak için aşağıdaki kod kullanılır. etiketi, özel/ortak anahtar oluşturmak için kullandığım özel anahtar etikettir.
let query: [String: Any] = [
kSecClass as String : kSecClassIdentity,
kSecAttrApplicationTag as String : tag,
kSecReturnRef as String: true
]
var retrievedData: SecIdentity?
var extractedData: AnyObject?
let status = SecItemCopyMatching(query as NSDictionary, &extractedData)
if (status == errSecSuccess) {
retrievedData = extractedData as! SecIdentity?
}
Ben SecItemCopyMatching kullanarak keychain'inizden özel anahtar & genel anahtar & sertifikası almak ve anahtarlığa sertifika eklemek mümkün, ama SecIdentity sorgulama çalışmıyor. Sertifikamın anahtarlarımla eşleşmesi mümkün mü? Bu nasıl kontrol edilir?
Ortak anahtarını temel64 biçiminde iOS'tan yazdırdım. Aşağıdaki basılmıştır:
MIIBCgKCAQEAo/MRST9oZpO3nTl243o+ocJfFCyKLtPgO/QiO9apb2sWq4kqexHy
58jIehBcz4uGJLyKYi6JHx/NgxdSRKE3PcjU2sopdMN35LeO6jZ34auH37gX41Sl
4HWkpMOB9v/OZvMoKrQJ9b6/qmBVZXYsrSJONbr+74/mI/m1VNtLOM2FIzewVYcL
HHsM38XOg/kjSUsHEUKET/FfJkozgp76r0r3E0khcbxwU70qc77YPgeJHglHcZKF
ZHFbvNz4E9qUy1mWJvoCmAEItWnyvuw+N9svD1Rri3t5qlaBwaIN/AtayHwJWoWA
/HF+Jg87eVvEErqeT1wARzJL2xv5V1O4ZwIDAQAB
sonra sertifika imza istek I Openssl (Openssl req -in ios.csr -pubkey -noout) kullanılarak ortak anahtar ekstre edildi. Aşağıdaki yanıtı basılmış: CSR oluşturulan anahtarın başında küçük bir fark olduğu görülmektedir
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo/MRST9oZpO3nTl243o+
ocJfFCyKLtPgO/QiO9apb2sWq4kqexHy58jIehBcz4uGJLyKYi6JHx/NgxdSRKE3
PcjU2sopdMN35LeO6jZ34auH37gX41Sl4HWkpMOB9v/OZvMoKrQJ9b6/qmBVZXYs
rSJONbr+74/mI/m1VNtLOM2FIzewVYcLHHsM38XOg/kjSUsHEUKET/FfJkozgp76
r0r3E0khcbxwU70qc77YPgeJHglHcZKFZHFbvNz4E9qUy1mWJvoCmAEItWnyvuw+
N9svD1Rri3t5qlaBwaIN/AtayHwJWoWA/HF+Jg87eVvEErqeT1wARzJL2xv5V1O4
ZwIDAQAB
-----END PUBLIC KEY----
. (MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A). Soru RSA encryption dayanarak, MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A RSA şifreleme "1.2.840.113549.1.1.1" için base64 formatlı tanımlayıcı gibi görünüyor. Yani sanırım ortak anahtar iyi olabilir mi?
Sertifika dönüştürme pem to der başarısız olursa – lipponen
Eğer ------ BEGIN SERTİFİKASI ----- 've' ----- END BELGESİ ----- 'don emin misin Sorunlara neden olabilecek yeni satırlar var mı? –
'u kaldırdıktan sonra yeni bir satır ile bitebilirseniz, tüm yeni satırları da kaldırıyorum (\ n), aksi halde SecCertificateCreateWithData hatası atar. Sadece soruya satır ekledim, gerçek kodda daha önce var olan satırda. – lipponen