Translated message

A translation of this page exists in English.

システムを Red Hat Subscription Management (RHSM) に登録できず、SSLError: certificate verify failed エラーメッセージが表示される

Solution Verified - Updated -

Environment

  • Red Hat Enterprise Linux (RHEL)
    • 9
    • 8
    • 7
    • 6
    • 5.7 以降
  • Red Hat Subscription Manager (RHSM)

Issue

  • システムを Red Hat Subscription Management (RHSM) に登録できず、SSLError: certificate verify failed エラーメッセージが表示されます。
  • システムを RHSM に登録する際に、エラーメッセージ SSLError: certificate verify failed が表示されます。

Resolution

注記: 以下の手順では、root としてサインインし、コマンドプロンプトを使用する必要があります。GUI インターフェースで起動している場合は、システムメニューからターミナルアプリケーションを選択し、コマンドプロンプトにアクセスします。

基本的なテスト

以下の各トラブルシューティングステップの前、および各ステップの前後に、以下の openssl および curl コマンドを使用して、SSL による基本的な接続性を確認できます。openssl コマンドは、確認後に Control+C を使用して接続を閉じます。

# openssl s_client -connect subscription.rhn.redhat.com:443 -CAfile /etc/rhsm/ca/redhat-uep.pem
# curl -v -u [rhnusername] --cacert /etc/rhsm/ca/redhat-uep.pem https://subscription.rhn.redhat.com/subscription/users/[rhnusername]/owners

または

# openssl s_client -connect subscription.rhsm.redhat.com:443 -CAfile /etc/rhsm/ca/redhat-uep.pem
# curl -v -u [rhnusername] --cacert /etc/rhsm/ca/redhat-uep.pem https://subscription.rhsm.redhat.com/subscription/users/[rhnusername]/owners

1.ファイアウォールルール (iptables または firewalld) の確認

Red Hat のサイトへのアクセスをブロックする、またはポート 443 経由のトラフィックを許可しない内部ファイアウォールルールがないか確認します。これがファイアウォールの問題かどうかを簡単に判断するには、次のローカルサービスを無効にします。

RHEL5 および RHEL6:

# service iptables stop

RHEL7 以降:

# systemctl stop firewalld

無効にした後に subscription-manager register コマンドが機能する場合は、ファイアウォール設定を更新して、ポート 443 経由の TCP トラフィックを許可する必要があります。以下のソリューションで詳細を確認してください。
ファイアウォールまたはプロキシーから Red Hat Subscription Manager (RHSM) にアクセスする

RHSM では、ポート 443 を経由した以下のインターネットリソースとの TCP トラフィックを許可する必要があります。

  • 登録時 (RHSM、subscription-manager): subscription.rhn.redhat.com または subscription.rhsm.redhat.com
  • 更新時 (yum): cdn.redhat.com

2. システムの時刻設定の確認

SSL は、適切な日時範囲に依存します。システムの時刻と日付が正しいことを確認します。

# grep ZONE /etc/sysconfig/clock

時刻は、TZ 時刻と現在の日付/時刻が同じである必要があります。

# date

RHEL5 および RHEL6:

# ntpq -p

RHEL7 以降:

# chronyc sources
# chronyc tracking 

最後のコマンドはジッターのチェックに役立ちます。

3.イントラネットおよびプロキシー設定の確認

ローカルネットワークに、接続に必要なルートと SSL プロキシールールがあることを確認します。

4. HTTPS 検査が実施されているかどうかをファイアウォール/プロキシー管理者に確認

ファイアウォール/プロキシーによる HTTPS 検査は、subscription-manager でのこのような問題の原因となることが知られています。 SSL 通信が再署名される場合があります (中間者攻撃に類似)。
RHSM のファイアウォール/プロキシーに関する問題のトラブルシューティング手順の詳細は、こちら および こちら を参照してください。

企業のファイアウォールが SSL インスペクションを実行している場合は、以下の変更が必要になります。


  • *.redhat.com での SSL インスペクションを無効にします。
  • ファイアウォールの証明書で Red Hat の CA 証明書 redhat-uep.pem をホワイトリストに登録し、これらの CA が *.redhat.com 経由のトラフィック受信時に競合しないようにします。

    詳細情報: Common networking issues while accessing Red Hat Subscription Management (RHSM)

    Red Hat の CA 証明書を使用して Red Hat の CDN との HTTPS 接続を確立する方法は、こちらの記事 を参照してください。

5.ルート証明書の再インストール

システムに python-rhsm パッケージを再インストールして、ルート証明書を再インストールできます。登録が正常に実行されるまで更新をオフラインで行う必要があるため、以下の操作を実施できます。

  • カスタマーポータルのパッケージのダウンロードページ (https://access.redhat.com/downloads/content/package-browser) で python-rhsm を検索してダウンロードします。

  • RPM パッケージファイルを RHEL サーバーにコピーします。

  • 以下のソリューションに記載するように、rpm を使用してパッケージをインストールします。
    How to install or upgrade an RPM package?

注記
RHEL 6 以降を実行している別のサーバーがある場合は、yumdownloader を使用できます。
その前に、RHEL 6 を実行している類似のシステムで yumdownloader コマンドを実行します。
以下の例には特定のバージョンが示されていますが、パッケージ番号の数字は時間の経過と共に大きくなる場合があります。

# mkdir /tmp/python-rhsm;cd /tmp/python-rhsm
# yumdownloader --resolve subscription-manager\*

次にフォルダーを scp コマンドで転送します。

tar -czvf /tmp/python-rhsm/python-rhsm.tar.gz /tmp/python-rhsm
scp /tmp/python-rhsm.tar.gz root@xxx.xxx.xxx.xxx:/tmp/

サーバーにログインし、python-rhsm パッケージを削除します。

# yum remove python-rhsm
# ls -la /tmp/python-rhsm.tar.gz
# mkdir -p /tmp/python-rhsm
# tar -zxvf python-rhsm.tar.gz
# cd python-rhsm
# yum install python-rhsm-1.14.3-1.el6.x86_64 subscription-manager-1.14.10-1.el6.x86_64.rpm subscription-manager-firstboot-1.14.10-1.el6.x86_64.rpm subscription-manager-gui-1.14.10-1.el6.x86_64.rpm

Root Cause

  • SSL の障害は、証明書失敗の原因となるシステム間に存在するファイアウォールや、該当するシステムの時刻設定が正しくないことなど、さまざまな問題によって引き起こされる可能性があります。
  • たとえば、HTTPS の検査を実施するファイアウォールが原因で、subscription-manager での証明書の検証に失敗する可能性があります。 その場合は、RHSM クライアントのファイアウォールを確認し、https の検査を無効にします。

Diagnostic Steps

curl コマンドの結果は次のようになります。

# curl -v -u rhnusername --cacert /etc/rhsm/ca/redhat-uep.pem https://subscription.rhn.redhat.com/subscription/users/rhnusername/owners
Enter host password for user 'rhnusername':
* About to connect() to subscription.rhn.redhat.com port 443 (#0)
*   Trying xx.xx.xx.xx... connected
* Connected to subscription.rhn.redhat.com (xx.xx.xx.xx) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/rhsm/ca/redhat-uep.pem
  CApath: none
* Issuer certificate is invalid: 'E=ca-support@redhat.com,CN=subscription.rhn.redhat.com,OU=Red Hat Network,O="Red Hat, Inc.",ST=North Carolina,C=US'
* NSS error -8156
* Closing connection #0
* Peer certificate cannot be authenticated with known CA certificates
curl: (60) Peer certificate cannot be authenticated with known CA certificates
More details here: http://curl.haxx.se/docs/sslcerts.html
...

/var/log/rhsm/rhsm.log のログ

    2011-12-27 08:41:07,641 [INFO]  @connection.py:350 - Using certificate authentication: key = /etc/pki/consumer/key.pem, cert = /etc/pki/consumer/cert.pem, ca = /etc/rhsm/ca/, insecure = False
    2011-12-27 08:41:07,641 [DEBUG] @connection.py:188 - Loading CA PEM certificates from: /etc/rhsm/ca/
    2011-12-27 08:41:07,641 [DEBUG] @connection.py:171 - Loading CA certificate: '/etc/rhsm/ca/redhat-uep.pem'
    2011-12-27 08:41:07,642 [DEBUG] @connection.py:171 - Loading CA certificate: '/etc/rhsm/ca/candlepin-stage.pem'
    2011-12-27 08:41:07,642 [WARNING]  @connection.py:383 - Error fetching supported resources, this UEPConnection is likely not usable:
    2011-12-27 08:41:07,642 [ERROR]  @connection.py:385 - No such file or directory
    Traceback (most recent call last):
      File "/usr/lib/python2.6/site-packages/rhsm/connection.py", line 376, in _load_supported_resources
        resources_list = self.conn.request_get("/")
      File "/usr/lib/python2.6/site-packages/rhsm/connection.py", line 252, in request_get
        return self._request("GET", method)
      File "/usr/lib/python2.6/site-packages/rhsm/connection.py", line 191, in _request
        context.load_cert(self.cert_file, keyfile=self.key_file)
      File "/usr/lib64/python2.6/site-packages/M2Crypto/SSL/Context.py", line 76, in load_cert
        m2.ssl_ctx_use_cert(self.ctx, certfile)
    SSLError: No such file or directory
    2011-12-27 08:41:07,643 [INFO]  @connection.py:362 - Connection Established: host: subscription.rhn.redhat.com, port: 443, handler: /subscription
    2011-12-27 08:41:11,713 [INFO]  @connection.py:339 - Using basic authentication as: isavia_sysdep
    2011-12-27 08:41:11,713 [DEBUG]  @connection.py:188 - Loading CA PEM certificates from: /etc/rhsm/ca/
    2011-12-27 08:41:11,713 [DEBUG]  @connection.py:171 - Loading CA certificate: '/etc/rhsm/ca/redhat-uep.pem'
    2011-12-27 08:41:11,714 [DEBUG]  @connection.py:171 - Loading CA certificate: '/etc/rhsm/ca/candlepin-stage.pem'
    2011-12-27 08:41:11,714 [DEBUG]  @connection.py:209 - Making request: GET /subscription/
    2011-12-27 08:41:12,456 [WARNING]  @connection.py:383 - Error fetching supported resources, this UEPConnection is likely not usable:
    2011-12-27 08:41:12,456 [ERROR]  @connection.py:385 - certificate verify failed
    Traceback (most recent call last):
      File "/usr/lib/python2.6/site-packages/rhsm/connection.py", line 376, in _load_supported_resources
        resources_list = self.conn.request_get("/")
      File "/usr/lib/python2.6/site-packages/rhsm/connection.py", line 252, in request_get
        return self._request("GET", method)
      File "/usr/lib/python2.6/site-packages/rhsm/connection.py", line 212, in _request
        conn.request(request_type, handler, body=body, headers=headers)
      File "/usr/lib64/python2.6/httplib.py", line 914, in request
        self._send_request(method, url, body, headers)
      File "/usr/lib64/python2.6/httplib.py", line 951, in _send_request
        self.endheaders()
      File "/usr/lib64/python2.6/httplib.py", line 908, in endheaders
        self._send_output()
      File "/usr/lib64/python2.6/httplib.py", line 780, in _send_output
        self.send(msg)
      File "/usr/lib64/python2.6/httplib.py", line 739, in send
        self.connect()
      File "/usr/lib64/python2.6/site-packages/M2Crypto/httpslib.py", line 50, in connect
        self.sock.connect((self.host, self.port))
      File "/usr/lib64/python2.6/site-packages/M2Crypto/SSL/Connection.py", line 185, in connect
        ret = self.connect_ssl()
      File "/usr/lib64/python2.6/site-packages/M2Crypto/SSL/Connection.py", line 178, in connect_ssl
        return m2.ssl_connect(self.ssl, self._timeout)
    SSLError: certificate verify failed
    2011-12-27 08:41:12,457 [INFO]  @connection.py:362 - Connection Established: host: subscription.rhn.redhat.com, port: 443, handler: /subscription
    2011-12-27 08:41:12,458 [DEBUG]  @connection.py:188 - Loading CA PEM certificates from: /etc/rhsm/ca/
    2011-12-27 08:41:12,459 [DEBUG]  @connection.py:171 - Loading CA certificate: '/etc/rhsm/ca/redhat-uep.pem'
    2011-12-27 08:41:12,459 [DEBUG]  @connection.py:171 - Loading CA certificate: '/etc/rhsm/ca/candlepin-stage.pem'
    2011-12-27 08:41:12,460 [DEBUG]  @connection.py:209 - Making request: GET /subscription/users/isavia_sysdep/owners
    2011-12-27 08:41:13,104 [ERROR]  @managercli.py:65 - Error during registration: certificate verify failed
    2011-12-27 08:41:13,104 [ERROR]  @managercli.py:66 - certificate verify failed
    Traceback (most recent call last):
      File "/usr/share/rhsm/subscription_manager/managercli.py", line 600, in _do_command
        owner_key = self._determine_owner_key(admin_cp)
      File "/usr/share/rhsm/subscription_manager/managercli.py", line 678, in _determine_owner_key
        owners = cp.getOwnerList(self.username)
      File "/usr/lib/python2.6/site-packages/rhsm/connection.py", line 488, in getOwnerList
        return self.conn.request_get(method)
      File "/usr/lib/python2.6/site-packages/rhsm/connection.py", line 252, in request_get
        return self._request("GET", method)
      File "/usr/lib/python2.6/site-packages/rhsm/connection.py", line 212, in _request
        conn.request(request_type, handler, body=body, headers=headers)
      File "/usr/lib64/python2.6/httplib.py", line 914, in request
        self._send_request(method, url, body, headers)
      File "/usr/lib64/python2.6/httplib.py", line 951, in _send_request
        self.endheaders()
      File "/usr/lib64/python2.6/httplib.py", line 908, in endheaders
        self._send_output()
      File "/usr/lib64/python2.6/httplib.py", line 780, in _send_output
        self.send(msg)
      File "/usr/lib64/python2.6/httplib.py", line 739, in send
        self.connect()
      File "/usr/lib64/python2.6/site-packages/M2Crypto/httpslib.py", line 50, in connect
        self.sock.connect((self.host, self.port))
      File "/usr/lib64/python2.6/site-packages/M2Crypto/SSL/Connection.py", line 185, in connect
        ret = self.connect_ssl()
      File "/usr/lib64/python2.6/site-packages/M2Crypto/SSL/Connection.py", line 178, in connect_ssl
        return m2.ssl_connect(self.ssl, self._timeout)
    SSLError: certificate verify failed

この問題の原因となる証明書がローカルにインストールされていないことを確認します。

# certutil -L -d sql:/etc/pki/nssdb/

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.

Comments