iOS を使用して、CN (共通名) と FQDN (完全修飾ドメイン名) の証明書を使用してサーバーに接続していましたserver.myexample.com
。サーバー証明書は、私自身のルート CA によって署名されました (その証明書をアンカー証明書に追加し、ここでSecTrustSetAnchorCertificates
説明した方法を使用して検証しました)。NSURLAuthenticationChallenge
iOS クライアントで、次の場所にある REST サービスに接続しようとしましたserver.myexample.com/Path1/service1
が、次のエラーが表示され続けました。
The certificate for this server is invalid. You might be connecting to a server
that is pretending to be “server.myexample.com” which could put your confidential
information at risk.
Error occurred while fetching https://server.myexample.com/Path1/service1: Error
Domain=NSURLErrorDomain Code=-1202 "The certificate for this server is invalid.
You might be connecting to a server that is pretending to be “server.myexample.com”
which could put your confidential information at risk."
同じ情報で追加のメッセージが表示されますが、エラーが指定されています:NSErrorFailingURLStringKey
とNSURLErrorFailingURLPeerTrustErrorKey
.
server.myexample.com/service1
リクエスト URL から Path1 を削除してサービスを呼び出すこともでき、サーバー証明書の検証が正しく機能することがわかりました。どうしてこれなの?サーバーに必要な証明書は 1 つだけであるという印象を受けました。つまり、サーバーがホストするすべてのサービスも同じ証明書を使用することになります。パスごとに個別のサーバー証明書が必要な場合がありますか? サーバーのIPアドレス/ドメインが独自の証明書を持つ必要がある後のパスを知りませんでした。
要約する:
- アンカー証明書にルート CA 証明書がある iOS クライアント アプリ
- ルート CA によって署名されたサーバー
server1
の証明書には の CN がserver.myexample.com
あり、その FQDN はhttps://server.myexample.com
です。 - 次の方法で Web ブラウザからアクセスできる
サーバー
server.myexample.com
ホスト:service1
https://server.myexample.com/service1
(サーバーの iOS クライアントの認証を通過します)https://server.myexample.com/Path1/service1
(iOS クライアントのサーバー認証に失敗)
- CA およびサーバー証明書は OpenSSL 経由で作成されました
前もって感謝します!