2

サードパーティのフレームワークと SSL を使用する iOS アプリを開発しています。
サーバーに接続するには、サーバー証明書、クライアント証明書、およびパスフレーズを渡す必要があります。

[HostConfiguration hostConfigurationWithAddress:@"demo.server...."
                                           port:743
                                 securedWithSSL:YES
                                 serverCertPath:[[NSBundle mainBundle] pathForResource:@"SERVER-CERT" ofType:@"der"]
                            clientCertChainPath:[[NSBundle mainBundle] pathForResource:@"CLIENT-CERT" ofType:@"p12"]
                                chainPassphrase:@"ABCDEFG"];

それで、私は彼らのサポートに接続するための証明書を要求し、彼らは私にzipファイルを送ってくれました(私はMacを使用しています):

  • chain_2016.pem (mac は「ルート」として識別)
  • パスフレーズ
  • yourCertificate.pem (「標準」)
  • yourCertificate.p12 (「個人」)

パスフレーズ ファイルには 2 つの文字列が含まれています。p12 ファイルのパスフレーズと、その目的がわからない 32 文字の長さの文字列です。次のようになります: 53CFE0E1914EF853E148F29C0A56B716

p12 ファイルとパスフレーズが正しいことはわかっていますが、混乱しているのは、DER でエンコードされた証明書が 1 つしか必要ない 2 つの PEM ファイルです。を使用して各PEMをDERに変換しようとしましたが、うまくいき
openssl x509 -in ...
ませんでした...

chain_2016との両方の内容を印刷して、それに加えて 2 つの追加の証明書が含まれyourCertificate.pemていることに気付きました。yourCertificate.pemchain_2016

chain_2016.pem

cat chain_2016.pem
-----BEGIN CERTIFICATE-----
MIIERTCCAy2gAwIBAgIINQskOyELGawwDQYJKoZIhvcNAQEFBQAwga8xHjAcBgkq
[...]
VPEpWKH17rzBvmktsDjqo1Zch8xiWSzP0DnJJw13Zn/cPwBJkHY0LPA=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFSzCCBDOgAwIBAgIIPuhYaSjrBR8wDQYJKoZIhvcNAQEFBQAwga8xHjAcBgkq
[...]
ZeitvrwyCtzVo7NWb+Zf
-----END CERTIFICATE-----

あなたの証明書.pem

cat yourCertificate.pem
Bag Attributes
localKeyID: 2E EC 57 1C 31 82 6D 82 68 59 86 93 FB FA 65 16 58 85 21 22 
friendlyName: myApp.test.client
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCu9UVuZyLsOc5u
[...]
zoQQfIreqU9KN4nhmZLKR0zY
-----END PRIVATE KEY-----
Bag Attributes
localKeyID: 2E EC 57 1C 31 82 6D 82 68 59 86 93 FB FA 65 16 58 85 21 22 
friendlyName: myApp.test.client
...Here some other info like subject/email etc...
-----BEGIN CERTIFICATE-----
MIIHljCCBX6gAwIBAgIIETxy2amJI0cwDQYJKoZIhvcNAQENBQAwgbUxHjAcBgkq
[...]
hdAq5P+vcHfD8cGOdI61yJB2PgJg67lWviU=
-----END CERTIFICATE-----
Bag Attributes
friendlyName: CompanyName Meta ROOT CA TEST
...Again some other info like subject/email etc...
-----BEGIN CERTIFICATE-----
MIIERTCCAy2gAwIBAgIINQskOyELGawwDQYJKoZIhvcNAQEFBQAwga8xHjAcBgkq

[This is the same as one of the certificates in chain_2016]

VPEpWKH17rzBvmktsDjqo1Zch8xiWSzP0DnJJw13Zn/cPwBJkHY0LPA=
-----END CERTIFICATE-----
Bag Attributes
friendlyName: CompanyName SUB TEST ROOT CA 1
...Again some other info like subject/email etc...
-----BEGIN CERTIFICATE-----
MIIFSzCCBDOgAwIBAgIIPuhYaSjrBR8wDQYJKoZIhvcNAQEFBQAwga8xHjAcBgkq

[Second certificate in chain_2016]

ZeitvrwyCtzVo7NWb+Zf
-----END CERTIFICATE-----

SSL を扱うのはこれが初めてなので、誰かが私を助けてくれることを願っています。ありがとう !

更新:
私が言ったように、ペドロフに感謝します、私はすでに試しました:

を使用して各PEMをDERに変換しようとしましたが、うまくいき
openssl x509 -in ...
ませんでした...

このフレームワークを使用するには、2 つの手順があります。まず、サーバーへの接続を確立してから、アクションを実行します。変換された DER ファイルのいずれかを使用すると接続できますが、アクション (ログインなど) を実行しようとすると、「このアクションは許可されていません」というメッセージが表示されます。これは、証明書に問題がなく、SSL とは関係のない別の場所からエラーが発生したことを意味しますか?

4

1 に答える 1

1

双方向SSLを実行しているようです。必要なもの:

  • トラストストアに追加し、ハンドシェイク中に検証するサーバー証明書のパス。おそらくchain_2016.pem
  • ハンドシェイク時に提示するクライアント証明書。yourCertificate.p12 とパスフレーズ

PEM ファイルには、複数の証明書や秘密鍵を含めることができます。----- BEGIN ----- -----END ----- それらはヘッダー で区切られています。

おそらく彼らは同じ情報をyourCertificate.pemyourCertificate.p12で送信し、フォーマットを変更しただけで、パスワードは最初のケースでは秘密鍵に対応し、2 番目のケースでは p12 ファイルのパスワードに対応しています。GUI ツールKeyStoreExplorerまたは opensslを使用して、.p12 ファイルの内容を簡単に確認できます。

DERは、証明書をエンコードするためのバイナリ形式です。PEMは、base64 に変換され、ヘッダーが追加された DER ファイルです。PEM を DER に変換するには、openssl を使用します (これを参照) 。

 openssl x509 -in chain_2016.pem -outform der -out chain_2016.der

要約すると、ドキュメントを確認すると、必要になると思います

serverCertPath: chain_2016.der
clientCertChainPath: yourcertificate.p12
chainPassphrase: theP12Passphrase
于 2016-08-02T07:17:12.760 に答える