2

iOS デバイス上で動作する SSL/TLS サーバーを構築することは可能ですか? はいの場合、どのように?

私の疑問は次の質問に関連しています: デバイス上で、それ以降使用する自己署名証明書をオンザフライで作成できますか? または、SSL/TLS に証明書を使用しないように指示できますか?

私の iOS アプリではAsyncSocketを使用しています。アプリは同時にクライアントとサーバーの両方です。

クライアント側は次のように実装されます。

- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port {
    // Don't even validate the certificate chain
    NSDictionary *settings = @{(NSString *)kCFStreamSSLValidatesCertificateChain : (id)kCFBooleanFalse};

    [sock startTLS:settings];
}

- (void)onSocketDidSecure:(AsyncSocket *)sock {
    // omitted: send the message...
}

サーバー側(別のiOS デバイスで実行されている) は、次のように実装されます。

- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port {
    // Don't even validate the certificate chain
    NSDictionary *settings = @{(NSString *)kCFStreamSSLValidatesCertificateChain : (id)kCFBooleanFalse,
                            (NSString *)kCFStreamSSLIsServer : (id)kCFBooleanTrue};

    [sock startTLS:settings];
}

- (void)onSocketDidSecure:(AsyncSocket *)sock {
    // omitted: read the message...
}

ただし、クライアントがサーバーに接続しようとすると、デリゲートのメソッドonSocket:willDisconnectWithError:が呼び出され、エラーが発生しますDomain=kCFStreamErrorDomainSSL Code=-9848

4

1 に答える 1

1

iOS デバイス上で動作する SSL/TLS サーバーを構築することは可能ですか? はいの場合、どのように?

絶対。テスト目的で、シミュレーターとデバイスの両方で SSL/TLS を使用して CocoaHTTPServer を使用しました。クライアント証明書を使用するには、いくつかの変更を加える必要があります。これらのほとんどは、GitHub の問題リストのパッチにあります。

iOS でオンザフライで証明書を作成できますか? 私が知っていることではありません。

SSL に証明書を使用しないように指示できますか? うーん。できたとしても、SSL を使用する意味は何ですか? 証明書は、トランスポートを「保護」するものです。SSL は信頼のモデルであり、リンクの両端の当事者が他方の当事者の信頼を評価します。その場で証明書を作成している場合、または証明書の期間を使用しない場合は、その信頼モデルを無効にしています - あなたは何も保護していません.

于 2013-03-21T07:17:10.813 に答える