shiro_usagi
@shiro_usagi (shiro usagi)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

opensslにおけるpemファイル設定についての質問(解決済)

2020年08月12日 初稿
2020年08月14日 解決

目的

SSL通信環境をセットアップして、curlやopenssl、rubyからダウンロード等を行う上で第一にSSL通信を駆使出来るようにする。第二に理解のステップアップと問題の切り分けが出来ることが目的。

質問1

opensslインストール時の./configureで以下のように設定出来ます。
--prefix=/usr/local/ssl  インストールするディレクトリ、defaultは「/usr/local/ssl」
--openssldir=/usr/local/ssl CA関連の各種ファイルのインストール先、defaultは「/usr/local/ssl」

1−1.opensslでcacert.pemファイル設定値を出力するコマンドか変数を知りたいです。
それとも質問が的外れでopensslからは、.pemファイルは常に入力でしょうか?
1−2.opensslで「CA関連の各種ファイルのインストール先ディレクトリ設定値」を知るコマンドか変数を知りたいです。

.pemファイル設定を知るコマンドや変数は無く(?)
opensslの.pem指定はビルド時のディレクトリ(筆者の場合:/usr/local/stow/openssl-111g/ssl、又は/usr/local/ssl)に一意に決まり、なおかつユーザーがダウンロードした〜.pemファイルになる、ということでしょうか?
(curlは.curlrc等でCApath、CAfileを決めることが出来る。)

古いかどうかの確認の仕方は分かってきました。
openssl x509 -noout -dates -in /usr/local/stow/openssl-111g/ssl/cert.pem

質問2
opensslでcacert.pemファイルをダウンロードして、cert.pemにリネームするネットの解説が多くあります。このファイル名変更の根拠を知りたいです。

man s_client
を見るとCAcert.pemとcert.pemは厳密に別と考えます。
(cert.pemは例えばMycert.pem、users_cert.pemの意味合いでは?)

質問3
サーバのSSL CA(認証局)証明書が古くてcurl がエラーになる件 - うまいぼうぶろぐ
https://hogem.hatenablog.com/entry/20120705/1340284071

cacert.pemファイルをダウンロードして、〜.crtに拡張子変更するネットの解説が多くあります。この拡張子変更の根拠を知りたいです。

RSA における拡張子の違い | PEM, CRT, CER, CERT, KEY, DER, CSR
http://tooljp.com/windows/chigai/html/Cipher/PEM-CRT-CER-CERT-KEY-DER-CSR.html

ここを読む限り、厳密に別と考え拡張子を変えてはいけないと考えますが、どうでしょうか?

以上

回答者のコメント内容で解決済み。
インストール後、openssl version -aの確認を何故多くの人が書かないかな?

0

1Answer

1-1: 出力できるかどうかでいえば、 OpenSSL のさまざまなサブコマンドを駆使すれば CA 証明書を作ることはできます。証明書の用途によって作り方が変わるので一概には説明できません。

1-2: コンパイル時に指定された --openssldir の値は openssl version -a コマンドで表示できます。

$ openssl version -a
LibreSSL 2.8.3
built on: date not available
platform: information not available
options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx) 
compiler: information not available
OPENSSLDIR: "/private/etc/ssl"

OpenSSL がデフォルトで参照する証明書ファイルはこのディレクトリの cert.pem です。 SSL_CERT_FILE 環境変数にパスを指定すれば参照先を変えられます。参考: man SSL_CTX_load_verify_locations

The default CA certificates file is called "cert.pem" in the default OpenSSL directory. Alternatively the SSL_CERT_FILE environment variable can be defined to override this location.

2: 上述のように特定のファイル名を期待する設定がなされているときはリネームする意味はあります。そうでなく、コマンド引数で -in cert.pem のようにファイルを与えるときは、どんなファイル名でも違いはありません。

3: 同じく、ファイル名を期待する設定があってそれに合わせたい場合を除けば、拡張子に意味はありません。

.pem はファイルが PEM 形式、つまり秘密鍵や証明書をテキストでエンコードする形式で書かれていることを表しています。 .pem ファイルには複数の秘密鍵や証明書を含めることができます。

.crt は特に証明書を含むファイルのことで、中身は PEM 形式であることも、バイナリでエンコードする DER 形式であることもあります。

よって、 PEM 形式の証明書を含むファイルの拡張子は .pem でも .crt でもいいわけです。さらにいえば、 openssl コマンドはファイルの拡張子を気にしませんから、 .txt でもそれ以外でも構いません。

1Like

Comments

  1. @shiro_usagi

    Questioner

    1-2 version -aはman openssl では見つかりませんでしたが、コメントのversion -aを見て
    openssl version -help
    openssl x509 -help
    openssl s_client -help
    をみつけました。助かります。

    >さらにいえば、 openssl コマンドはファイルの拡張子を気にしませんから、 .txt でもそれ以外でも構いません。

    驚きました。

    頂いたご回答でopensslの学習を進めることとcurl、rubyなどを先に進めることが出来ます。
    分かりやすい文章と丁寧なコメントを有り難う御座いました。

Your answer might help someone💌