keytoolを使用して複数の証明書を1つのファイルにインポートする方法[証明書ストアへ]?
keytool -importcertは、最初のもののみをインポートします。
keytoolを使用して複数の証明書を1つのファイルにインポートする方法[証明書ストアへ]?
keytool -importcertは、最初のもののみをインポートします。
PEM ファイルからすべての証明書をインポートする bash スクリプト:
#!/bin/bash
PEM_FILE=$1
PASSWORD=$2
KEYSTORE=$3
# number of certs in the PEM file
CERTS=$(grep 'END CERTIFICATE' $PEM_FILE| wc -l)
# For every cert in the PEM file, extract it and import into the JKS keystore
# awk command: step 1, if line is in the desired cert, print the line
# step 2, increment counter when last line of cert is found
for N in $(seq 0 $(($CERTS - 1))); do
ALIAS="${PEM_FILE%.*}-$N"
cat $PEM_FILE |
awk "n==$N { print }; /END CERTIFICATE/ { n++ }" |
keytool -noprompt -import -trustcacerts \
-alias $ALIAS -keystore $KEYSTORE -storepass $PASSWORD
done
例えば:
./jks_import_pem TrustedCAs.PEM changeit truststore.jks
私は同じことをしたかったのですが、キーもインポートしている場合にのみ可能であるようです:
エントリには、キー エントリと信頼できる証明書エントリの 2 種類があり、キー エントリにのみ証明書の「チェーン」を含めることができます。信頼できる証明書エントリはすべて単一の証明書エントリです。
( https://www.java.net/node/674524#comment-709695 )
最初に PKCS#7 形式に変換しようとしましたが、上記の理由か、keytool のバージョンが古すぎたため、うまくいきませんでした。
したがって、最初にファイルを個別の証明書に分割する必要がありました。
cat certchain.pem | awk 'split_after==1{n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > ("cert" n ".pem")}'
( https://serverfault.com/q/391396/58568 )
次に、それぞれを個別にインポートします。
与えられた答えは、実際には Ansible ソリューションではなく、代替案のようなものです。
以下に書いたものは最初の証明書で機能しますが、ループしていません。何か案は?
java_install_keystore_cert: true
java_keystore_certs: "{{ apps.jira.keystore_certs }}"
java_keystore_cert_alias: test
apps:
jira:
keystore_certs:
- certName: xyz.xxx.com
certFileName: xyz.xxx.com.pem
- certName: xxx.com
certFileName: xxx.com.pem
- name: Copy SSL certificate to remote server
copy:
src: "{{ java_keystore_certs[0].certFileName }}"
#src: "{{ java_keystore_cert_file }}"
dest: /tmp/
when: java_install_keystore_cert|default(false)
- name: Determine Java cacerts keystore location
find:
paths: "{{ java_home }}/"
patterns: 'cacerts'
recurse: yes
register: cacerts_file
when: java_install_keystore_cert|default(false)
- name: Import SSL certificate to Java cacerts keystore
java_cert:
cert_alias: "{{ java_keystore_cert_alias }}"
#cert_path: "/tmp/{{ java_keystore_cert_file }}"
cert_path: "/tmp/{{ java_keystore_certs[0].certFileName }}"
keystore_path: "{{ cacerts_file.files[0].path }}"
keystore_pass: changeit
executable: "{{ java_home }}/bin/keytool"
state: present
when: java_install_keystore_cert|default(false) and cacerts_file is defined