自己署名証明書に関する問題のトラブルシューティング

ここにトピックの短い説明を入力します(オプション)。

自己署名証明書を作成してOracle NoSQL Databaseプロキシに接続しようとすると、接続に失敗することがあります。

表G-1 接続失敗のシナリオと解決策

CNの値 クライアント接続URL 接続の結果
CN=localhost https://localhost:8089 接続成功
CN=proxy-nosql.example.com https://proxy-nosql.example.com:8089 接続成功
CN=*.example.com https://proxy-nosql.example.com:8089 接続成功
CN=proxy-nosql https://proxy-nosql:808 接続成功
CN=proxy-nosql.example.com https://proxy-nosql:8089 接続失敗
CN=proxy-nosql.example.com https://10.0.0.9:8089 接続失敗
CN=localhost https://10.0.0.9:8089 接続失敗
CN=localhost https://proxy-nosql:8089 接続失敗
CN=localhost https://proxy-nosql.example.com:8089 接続失敗
CN=proxy-nosql https://proxy-nosql.example.com:8089 接続失敗
CN=*.example.com https://proxy-nosql.subdomain.example.com:8089 接続失敗
接続失敗エラーを回避するための一般的なガイドライン:
  • クライアントは、Oracle NoSQL Databaseプロキシに接続しようとするときに、SSL証明書をフェッチし、接続先となるNoSQL Databaseプロキシ・サーバーのホスト名またはNoSQL Databaseプロキシ・サーバーのドメイン名を、そのSSL証明書内で指定されている共通名(CN)と比較します。それらが完全に同じである場合は、そのSSL証明書を使用して接続を暗号化します。そうでない場合は、接続に失敗します。
  • 接続に失敗したら、CNを変更するかSANを追加して証明書を再生成する必要かあるかどうかを判断します。
    例:
     CN=proxy-nosql.example.com
    subjectAltName=DNS:proxy-nosql,DNS:localhost,IP:10.0.0.9,DNS:proxy-alias.example.com

エラーのシナリオと解決策の例:

例1: 値がCN=proxy-nosql.example.comであり、アプリケーションがhttps://proxy-nosql:8089 を使用して接続しようとして、その接続に失敗します。

ホスト名が同じでないことが、接続失敗の理由です。次のいずれかの解決策を実施できます。
  • クライアント接続URLをhttps://proxy-nosql.example.com:8089に変更できます。
  • 証明書内のCNをCN=proxy-nosqlに変更できます
  • proxy-nosqlをSANであるsubjectAltName=DNS:proxy-nosqlとして追加できます

例2: 値がCN=*.example.comであり、アプリケーションがhttps://proxy-nosql.subdomain.example.com:8089を使用して接続しようとして、その接続に失敗します。

ドメイン名が同じでないことが、接続失敗の理由です。次のいずれかの解決策を実施できます。
  • 証明書内のCNをCN=*.subdomain.example.comに変更できます
  • subdomain.example.comのSANであるsubjectAltName=DNS:*.subdomain.example.comを追加できます

例3: 値がCN=proxy-nosql.example.comであり、アプリケーションがhttps://localhost:8089を使用して接続しようとして、その接続に失敗します。

ホスト名が同じでないことが、接続失敗の理由です。次のいずれかの解決策を実施できます。
  • クライアント接続URLをhttps://proxy-nosql.example.com:8089に変更できます。
  • 証明書内のCNをCN=localhostに変更できます
  • localhostをSANであるsubjectAltName=DNS:localhostとして追加できます

例4: 値がCN=proxy-nosql.example.comであり、アプリケーションがhttps://10.0.0.9:8089を使用して接続しようとして、その接続に失敗します。

IPを使用して接続を実行しようとしていることが、接続失敗の理由です。次のいずれかの解決策を実施できます。
  • クライアント接続URLをhttps://proxy-nosql.example.com:8089に変更できます。
  • IPをSANであるsubjectAltName=IP:10.0.0.9として追加できます

接続が成功するかどうかをテストするための簡単なコマンド:

簡単なcurlコマンドを使用して接続をシミュレートし構成を検証できます。

ユースケース1: 証明書のCNのみを表示:
$ openssl x509 -text -noout -in certificate.pem | grep CN
Issuer: C=US, ST=CA, L=San,CN=proxy-nosql/emailAddress=localhost@oraclevcn.com
Subject: C=US, ST=CA, L=San, CN=proxy-nosql/emailAddress=localhost@oraclevcn.com
curlを使用したテストに不合格:
$ curl --cacert certificate.pem https://node1-nosql.example.com:8087
curl: (51) Unable to communicate securely with peer: requested domain name does
not match the server's certificate.

理由: このURL内のアドレスnode1-nosql.example.comが証明書内のCN=proxy-nosqlと一致していません。また、SANもありません。

curlを使用したテストに合格:
$ curl --cacert certificate.pem https://proxy-nosql:8087

理由: このURL内のアドレスが証明書内のCN=proxynosqlと一致しています。

ユースケース2: 証明書のCNおよびSANを表示
$ openssl x509 -text -noout -in
certificate.pem | grep CN   
Issuer: CN=*.example.com  
Subject: CN=*.example.com
$ openssl x509 -text -noout -in certificate.pem | grep -e DNS -e IP
  DNS:proxy-nosql,  DNS:*.subdomain.example.com, IP Address:10.0.0.9
curlを使用したテストに合格:
$ curl --cacert certificate.pem https://proxy-nosql.subdomain.example.com:8087
理由: このURL内のアドレスproxy-nosql.subdomain.example.comが証明書内のCN=*.example.comと一致していなくても、証明書内のSANであるsubjectAltName=DNS:*.subdomain.example.comと一致しています。
$ curl --cacert certificate.pem https://proxy-nosql:8087

理由: このURL内のアドレスproxy-nosqlが証明書内のCN=*.example.comと一致していなくても、証明書内のSANであるsubjectAltName=DNS:proxy-nosqlと一致しています。