20

keytoolを使用して複数の証明書を1つのファイルにインポートする方法[証明書ストアへ]?

keytool -importcertは、最初のもののみをインポートします。

4

7 に答える 7

30

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
于 2015-05-02T00:47:05.613 に答える
2

私は同じことをしたかったのですが、キーもインポートしている場合にのみ可能であるようです:

エントリには、キー エントリと信頼できる証明書エントリの 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 )

次に、それぞれを個別にインポートします。

于 2014-08-14T20:49:11.670 に答える
0

与えられた答えは、実際には 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
于 2019-11-26T15:35:04.677 に答える