Active IQ Unified ManagerではCSR生成が機能しません
環境
- Active IQ Unified Manager(AIQUM)9.x
- Red Hat Enterprise Linux(RHEL)
- 証明書署名要求(CSR)
問題
- RHEL上で動作するAIQUMで、全般→HTTPS証明書→HTTPS証明書署名要求のダウンロードに移動しても何も起こりません。CSRファイルはダウンロードできず、GUIにも目に見えるエラーは表示されません。
- クリック時に
/opt/netapp/essentials/jboss/server/onaro/log/ocumserver.logを確認すると、BouncyCastle署名エラーが表示されます:
ERROR [admin] [default task-3118] [c.n.o.r.m.e.GlobalExceptionHandler] cannot create signer: Key must not be nullorg.bouncycastle.operator.OperatorCreationException: cannot create signer: Key must not be nullat deployment.dfm-app.war//org.bouncycastle.operator.jcajce.JcaContentSignerBuilder.build(Unknown Source)at deployment.dfm-app.war//com.netapp.dfm.app.common.security.CertificateManagerImpl.createCertificationRequest
(CertificateManagerImpl.java:110)…Caused by: java.security.InvalidKeyException: Key must not be null
- ブラウザのHARキャプチャでも同じエラーが500応答として表示されます
Download HTTPS Certificate Signing RequestRESTコール。 keytool -listをJBossキーストアに対して実行すると、インストール/アップグレード時に作成されたエントリが、予期しないキーサイズまたは署名アルゴリズムで表示される場合があります(たとえば、製品内の自己署名エントリが2048ビットであるべきなのに、3072ビットのRSAキーが表示されるなど)- これは、GUIが署名に使用することを想定している秘密鍵データが、キーストア内に存在しないか、一致していないことを示しています。
原因
- これは環境に関する、顧客のホストに特有の問題です:
- 強制モードのSELinuxまたは他のホスト強化により、AIQUM
jboss/umadminユーザーがCSRの生成フローで必要とするキーストアファイルの読み取りまたは書き換えをブロックする可能性があります。 - Ansibleなどのセキュリティ自動化ツール、CIS強化プレイブック、またはその他の構成管理エージェントは、定期的にAIQUMディレクトリ上のファイル所有権、モード、またはSELinuxラベルをリセットします — 最も重要なのは
/opt/netapp/essentials/jboss/server/onaro/cert/と/opt/netapp/data/ocie/です。その場合、GUIフローは秘密鍵を読み込むことができなくなり、BouncyCastleにはnullキーが渡され、ocumserver.logに示されているスタックトレースとともに、UIでCSR生成がサイレントに失敗します。 - これはAIQUM製品のコードパス自体の欠陥ではありません — SELinux/Ansibleがまだキーストアファイルを変更していない新規インストールでは、同じGUIフローが動作します。
解決策
|
警告
|
目標:キーストア/証明書オブジェクトが一貫しており、有効な秘密鍵マテリアルが含まれていることを確認し、サポートされているCLIヘルパーを再実行するか、フォールバックとして、keytoolを使用して一致するアルゴリズムと鍵長でキーストアエントリを再作成します。
- 現在のキーストアエントリの署名アルゴリズムと鍵長を確認してください。キーストアエントリの作成に使用されるアルゴリズムと鍵長は、CSRが署名される際にCAが想定するアルゴリズムと鍵長と一致している必要があります:
keytool -list -v -keystore /opt/netapp/essentials/jboss/server/onaro/cert/server.keystore -storepass $(/opt/netapp/essentials/bin/elytronstore.sh /opt/netapp/essentials/jboss/server/onaro/cert/server.keystore jboss $(cat /opt/netapp/essentials/conf/server.properties | grep "keystore.token" | cut -c 16-))
Signature algorithm name(例:SHA256withRSA)とSubject Public Key Algorithm/ キーサイズ(例:2048-bit RSA key)に注意してください。- 2つのキーストアのコピーが同期していることを確認してください。JBossキーストアとOCIEキーストアはバイト単位で完全に一致している必要があります。一致していない場合、GUIフローで「キーはnullであってはならない」という条件が発生する可能性があります:
cksum /opt/netapp/data/ocie/server.keystorecksum /opt/netapp/essentials/jboss/server/onaro/cert/server.keystore
- 両方の
cksum値が一致する必要があります。一致しない場合は、正常に動作することが確認されているバックアップから復元するか、JBossのコピーから再同期してください。 - サポートされている
cert.shヘルパーを使用してキーストアエントリを再生成します:
/opt/netapp/essentials/bin/cert.sh createcustom <FQDN><email><Org><City><Country> 2048 730 '<SAN list, comma separated>' 'true'
- これは、JBossとOCIEのキーストアのコピーを同期させ、AIQUMが管理する認証情報ストアを再利用するため、推奨される方法です。
cert.shが適合しない場合(たとえば、別のエイリアス/アルゴリズムが必要な場合)は、keytoolに直接フォールバックしてください。まず、エイリアスを特定します:
keytool -list -keystore /opt/netapp/essentials/jboss/server/onaro/cert/server.keystore -v -storepass $(/opt/netapp/essentials/bin/elytronstore.sh /opt/netapp/essentials/jboss/server/onaro/cert/server.keystore jboss $(cat /opt/netapp/essentials/conf/server.properties | grep "keystore.token" | cut -c 16-))
- 次に、(CAが想定するアルゴリズム/鍵長に一致する)鍵ペアとCSRを生成します:
keytool -genkeypair -alias keyentry -keystore /opt/netapp/essentials/jboss/server/onaro/cert/server.keystore -storetype JKS -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -dname "CN=<FQDN>" -ext san=dns:<FQDN>,dns:<short-name>,ip:<mgmt-ip> -validity 730 -storepass $(/opt/netapp/essentials/bin/elytronstore.sh /opt/netapp/essentials/jboss/server/onaro/cert/server.keystore jboss $(cat /opt/netapp/essentials/conf/server.properties | grep "keystore.token" | cut -c 16-))
keytool -certreq -alias keyentry -keystore /opt/netapp/essentials/jboss/server/onaro/cert/server.keystore -storetype JKS -sigalg SHA256withRSA -file server.csr -storepass $(/opt/netapp/essentials/bin/elytronstore.sh /opt/netapp/essentials/jboss/server/onaro/cert/server.keystore jboss $(cat /opt/netapp/essentials/conf/server.properties | grep "keystore.token" | cut -c 16-)) -keypass $(/opt/netapp/essentials/bin/elytronstore.sh /opt/netapp/essentials/jboss/server/onaro/cert/server.keystore jboss $(cat /opt/netapp/essentials/conf/server.properties | grep "keystore.token" | cut -c 16-))
- CA に証明書に署名してもらい、返された証明書が CSR と同じ署名アルゴリズムと鍵長であることを確認します(ここでの不一致は、インポート時に同じ「
Key must not be null」という症状を再現します)。 - 署名済み証明書をキーストアにインポートし直します:
keytool -importcert -alias keyentry -keystore /opt/netapp/essentials/jboss/server/onaro/cert/server.keystore -storetype JKS -storepass $(/opt/netapp/essentials/bin/elytronstore.sh /opt/netapp/essentials/jboss/server/onaro/cert/server.keystore jboss $(cat /opt/netapp/essentials/conf/server.properties | grep "keystore.token" | cut -c 16-)) -trustcacerts -file </path_to_the_cert_file/cert_name>.crt
- または、サポートされているヘルパーを使用します。
/opt/netapp/essentials/bin/cert.sh import </path_to_the_cert_file/cert_name>.crt
- OCIEを再同期し、Active IQ Unified Managerサービスを再起動して、新しいキーストアがJBossとOCIEの両方にロードされるようにします。
- 環境の根本原因に対処して、問題が再発しないようにします。
getenforceでSELinuxの状態を確認し、Enforcingの場合は、/var/log/audit/audit.logでActive IQ Unified Managerディレクトリに対するAVC拒否を確認し、必要なポリシー/ラベルを追加します。- Active IQ Unified Managerホストに対して実行されるAnsible/構成管理プレイブックを監査し、一般的なchmod/chown/restoreconステップからActive IQ Unified Managerが所有するパスを除外します。
パートナーノート
partnerNotes_text
追加情報
- Generate CSR GUIフローで影響を受けるファイル:
/opt/netapp/essentials/bin/cert.sh/opt/netapp/essentials/bin/certificatemanager/platform-base-display-key.jar/opt/netapp/data/ocie/server.keystore/opt/netapp/essentials/jboss/standalone/data/jbossCredStore.cs/opt/netapp/essentials/bin/elytronstore.sh/opt/netapp/essentials/conf/server.properties/opt/netapp/essentials/jboss/server/onaro/cert/server.keystore
- 2つの
server.keystoreファイル(/opt/netapp/data/ocie/と/opt/netapp/essentials/jboss/server/onaro/cert/の下)には、同一のcksumが必要です。
内部情報
- ソースケース: 2010649653 (UBS、RHEL上のAIQUM 9.16)
- CPEエスカレーション: CPE-12443 — AIQUM 9.16 — GUIからのCSR生成が失敗する:BouncyCastle 「署名者を作成できません:キーはnullであってはなりません」(UBS、2010649653)
- バグID: CAIQUM-7005
- パッチ:修正された
keystoresetup.jarがmysupportから入手可能 — AIQUM 9.18D21 - 両方の
server.keystoreコピーは同じcksumを持つ必要があります:
[root@scs001105021 ~]# cksum /opt/netapp/data/ocie/server.keystore1751053047 9941 /opt/netapp/data/ocie/server.keystore[root@scs001105021 ~]# cksum /opt/netapp/essentials/jboss/server/onaro/cert/server.keystore1751053047 9941 /opt/netapp/essentials/jboss/server/onaro/cert/server.keystore
- ソースケースでは、お客様のAnsible / セキュリティ強化によってAIQUMパスのファイル権限が変更され、SELinuxが強制モードになっていました。両方が原因となりました
- リモートセッション中の一時的な
setenforce 0は、SELinuxの影響を確認するためだけに使用され、その後元に戻されました。長期的な解決策は、セキュリティ強化プレイブックからAIQUMパスを除外するか、必要なSELinuxポリシーを追加することです。