web-dev-qa-db-ja.com

UbuntuでのSSL証明書と秘密鍵の最適な場所

Ubuntuでは、証明書の署名に使用する秘密鍵(nginxで使用)の最適な場所は/etc/ssl/private/にあるようです。

この answer は、証明書を/etc/ssl/certs/に入れる必要があることを追加していますが、安全ではないようです。 .crtファイルは安全に保管する必要がありますか、それとも公開と見なされますか?

63
Adam Nelson

.crtファイルは、接続するすべてのものに送信されます。それは公開されています。 (chown root:rootおよびchmod 644

秘密鍵の場所に追加するには、適切に固定するとともに、そこに保管してください。 (chown root:ssl-certおよびchmod 640

49
Shane Madden

秘密鍵ファイルを適切に保護する限り、どこに置いてもかまいません。 公開証明書は公開されています;保護は必要ありません-サーバー権限など。

答えを拡大するために、デフォルトの場所/etc/sslは使用しません。
バックアップなどの理由により、すべての鉱山を別の場所に保管する方が簡単です。

Apache SSLの場合、私は/etc/Apache2/ssl/privateまたは/etc/の同様の「ルート領域」に保管します。

設定例

この投稿はUbuntu(Debian)+ Apacheを対象としていますが、ほとんどのシステムで機能するはずです-
特定の構成(Apache/nginx/etc)でアクセス許可を適用し、場所/パスを更新するだけです。
SSLキーファイルが正しく保護されている場合(ディレクトリとファイル)、問題ありません。メモに注意してください!

ディレクトリを作成します。

Sudo mkdir /etc/Apache2/ssl
Sudo mkdir /etc/Apache2/ssl/private
Sudo chmod 755 /etc/Apache2/ssl
Sudo chmod 710 /etc/Apache2/ssl/private

注:
chmod 710はUbuntuでssl-certグループをサポートします。
(コメントを参照)
700に対する/etc/Apache2/ssl/privateへの権限の設定も正常に機能します。

SSLファイルを配置します。

publicwww ssl証明書と中間証明書を/etc/Apache2/sslに入れます
PUTprivatessl key(s)in /etc/Apache2/ssl/private

オーナーを設定:

Sudo chown -R root:root /etc/Apache2/ssl/
Sudo chown -R root:ssl-cert /etc/Apache2/ssl/private/

注:
ssl-certグループがない場合は、上の行で 'root:root'を使用するか、2行目をスキップしてください。

権限を設定します。

公開証明書

Sudo chmod 644 /etc/Apache2/ssl/*.crt

秘密鍵

Sudo chmod 640 /etc/Apache2/ssl/private/*.key

注:
Ubuntuのssl-certグループのため、グループの権限はREAD(640)に設定されています。 「600」も問題ありません。

Apache SSLモジュールを有効にする

Sudo a2enmod ssl

Apacheサイトファイルを編集して有効にします。

(最後の段落を参照)*

Sudo nano /etc/Apache/sites-available/mysiteexample-ssl.conf
Sudo a2ensite mysiteexample-ssl
#             ^^^^^^^^^^^^^^^^^ <-Substitute your ".conf" filename(s)

Apache2サービスを再起動します

Sudo service Apache2 restart

または

Sudo systemctl restart Apache2.service

できました。新しいSSLサイトをテストします。

*これも問題を超えていますが、デフォルトのApache SSLサイト構成ファイル(Sudo cp /etc/Apache2/sites-available/default-ssl.conf /etc/Apache2/sites-available/mysiteexample-ssl.conf)を良い出発点としてコピーできます/シンプルな(Ubuntu/Debian)Apache /で通常使用されるデフォルトのディレクティブ/ディレクトリの例/ SSL「conf」ファイル。通常、自己署名SSL証明書+キー(スネークオイル)、CAバンドル、および特定のSSLサイトで使用される一般的な ディレクティブ を指します。

コピーした後、新しい.confファイルを編集し、必要に応じて上記の新しい情報/パスで追加/削除/更新してから、Sudo a2ensite mysiteexample-sslを実行して有効にします。

36
bshea

ここでの答えはすべて問題ないようですが、問題の1つが見つかったことに言及したいと思います...中間ファイルまたはルートを使用して証明書を連結し、チェーンファイルを作成する必要がある場合は、しないでください = /etc/ssl/certsに入れます。c_rehashを実行すると、ルートまたは証明書内の中間物が原因で、証明書へのハッシュシンボリックリンクが作成される場合があるためです。

その後、証明書の有効期限が切れて証明書を削除し、c_rehashを再実行するかどうかわからない場合は、/etc/ssl/certsディレクトリのハッシュシンボリックリンクが壊れている可能性があり、奇妙なことが起こり始めますローカルマシンがSSL経由で自分自身に接続しようとし、検証対象のルートが見つからない場合。たとえば、curlを使用して、突然次のようになりました。

curl: (60) SSL certificate problem: unable to get issuer certificate

/etc/ssl/certsにあった古い.crtおよび連結された.pemファイルをクリーンアップした直後。

少なくともチェーンを別の場所に保存すると、この問題を回避できます。証明書とチェーンを保持するために/etc/ssl/local_certsを作成することにしたので、/etc/ssl/certsにあるCA証明書の混乱からそれらが失われることはありませんでした。

10
barryp

個々のファイル/ディレクトリのアクセス許可がchown root :0 private.keychmod 600 private.keyのように設定されていて、rootだけが読み取ることができれば、実際には危険な場所はありません。あなたが言うように、CSRと証明書ファイルはそれほど敏感ではありません。

これらの権限があれば、あなたが言及するパスと/ usr/local/sslは問題ないはずです。

2
Jonathan Ross

場所が正しい:

  • /etc/ssl/certs/ for .crtファイル
  • /etc/ssl/private for .keyファイル

所有者は両方でroot:rootでなければなりません(必要に応じてSudo chmod root:root <file>を使用して変更します)。

権限

  • 644 for .crtファイル
  • 600 for .keyファイル

これはnginxで機能します。

1