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
。