SSL 証明書を結合する

以下はやった時のメモになります。その時は以下のファイルがありました。

  • csr(Certificate Signing Request) コモンネームや組織名が含まれているファイル
    • -----BEGIN CERTIFICATE REQUEST-----が含まれる
  • cer, ca, crt デジタル証明書ファイル
    • -----BEGIN CERTIFICATE-----が含まれる
    • ルート証明書と中間CA証明書?(恐らくcerca
    • サーバー証明書?(恐らくcrt
    • 全部certificateの略?
  • rsa 秘密鍵ファイル
    • -----BEGIN PRIVATE KEY-----が含まれる

ファイルの確認

手元に有るファイルが上記以外の拡張子だった場合、以下の方法で確認することができます。

// Certificate Signing Request か?
openssl req -text -noout -in <filename>

// cer(crt?) か?
openssl x509 -text -noout -in <filename>

// rsa か?
openssl rsa -text -noout -in <filename>

結果が長々と出てきたり(Bash)echo $?や(Fish)echo $status0だったものが正です。

今回はcer(crt?)ファイルがすでに複数存在していたので、 証明書発行の為の Certificate Signing Request は扱わなくて良いようです。

結合

また複数存在しているcer(crt?)ファイルを 1 つのファイルに結合する必要がありますが、上記のopenssl x509を実行した時にSubject:の値がCN=自分のドメインとなっているファイルをが先頭に来るようにします。(複数ある場合は、Issuer:も見て次にその証明書が来るように結合しないと駄目?)

以下のような形で結合します。ただcatで結合すると-----END CERTIFICATE----------BEGIN CERTIFICATE-----のようになってしまうので、<(echo)によって改行を挟んでいます。

また、権限は400に設定します。

cat www.example.com.cer <(echo) ca.cer > result.crt
chmod 400 result.crt
# できたファイルに対しても確認をしておく
openssl x509 -text -noout -in result.crt

できたらサーバーに上げて更新します。

参照