3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

iOS NWConnection利用時のTLSの証明書を無視する方法

Posted at

はじめに

iPhoneと家庭内で使っているIoT機器とのTLSを使った暗号通信する時に、サーバ証明書の有効性の確認が失敗して、通信エラーになる現象がありました。例えば、IoT機器が自己署名の証明書を使っている場合です。このような場合に、iOSでTLS証明書を無視して通信する方法を書いておきます。

通常の実装

NWConnectionを用いた通常のTLS実装は、以下のようになります。今回の記事に関連する部分(NWConnectionのインスタンス化)のみ記載しています。この実装では、サーバ証明書の確認を行います。このため、IoT機器が自己署名の証明書を使っている場合には、サーバ証明書のエラーとなりIoT機器と通信ができません。

let connection = NWConnection(host: host, port: port, using: .tls)

サーバ証明書を無視する実装

以下のように、NWConnectionのパラメータ(using: params)を設定することで、サーバ証明書を無視することができます。sec_protocol_options_set_verify_block()sec_protocol_verify_complete(true)を設定します。この時に、connection.start(queue: queue)で使うqueueが引数に必要です。このため、対象のコードの上下にqueueに関するコードも記載してあります。

let queue = DispatchQueue(label: "label")

let options = NWProtocolTLS.Options()
sec_protocol_options_set_verify_block(options.securityProtocolOptions, { (_, _, sec_protocol_verify_complete) in
        sec_protocol_verify_complete(true)
    }, queue)
let params = NWParameters(tls: options)
let connection = NWConnection(host: host, port: port, using: params)

// 途中省略
connection.start(queue: queue)

参考文献

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?