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