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


62

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

この答えは、証明書が入るべきであると付け加えています/etc/ssl/certs/が、それは安全でない場所のようです。ください.crtファイルを安全に保管する必要があるか、彼らは公共と考えていますか?


19
必要に.crt応じて、タイムズスクエアの看板に置くことができます。
ceejayoz

回答:


48

.crtファイルは、接続するすべてのものに送信されます。パブリックです。(chown root:rootおよびchmod 644

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


なぜそのディレクトリはデフォルトでg + sではないのだろうか。
コリンアンダーソン14

2
する必要はありません。ディレクトリは0750であるため、グループに属していないユーザーがディレクトリに移動してファイルを読み取る方法はありません。
ワンブル

2
ssl-certは、ubuntuの無効なグループ名のようです。たぶん、代わりにchown root:rootであるべきです
Atifm

1
@Atifm ssl-cert certグループは、16.04または18.04で導入されました。私はどちらを思い出せません。
DylanYoung

1
@DylanYoung:Ubuntu 12.04には確かに存在します。パッケージによって作成ssl-certされ、おそらく、とりわけ、自己署名のスネークオイル証明書を作成するために使用されると信じています
MestreLion

35

秘密鍵ファイルを適切に保護している限り、それらをどこに配置してもかまいません。パブリック証明書が公開されています。保護は不要-サーバー権限など。

答えを拡張するために、デフォルトの場所を使用しません/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

注:Ubuntuでグループを
chmod 710サポートしますssl-cert
(コメントを参照)
許可を700オンに設定して/etc/apache2/ssl/privateも正常に機能します。

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

入れ公共での中間証明書(複数可)と一緒に、WWWのSSL証明書(複数可)を /etc/apache2/ssl
入れて、民間でのSSLキー(S)/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サイトをテストします。

*繰り返しますが、これは疑問を超えていますがsudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/mysiteexample-ssl.conf、単純な(Ubuntu / Debian)Apache / SSL 'conf'ファイルで通常使用されるデフォルトのディレクティブ/ディレクトリの適切な出発点/例として、デフォルトのApache SSLサイト構成ファイル()をコピーできます。通常、自己署名SSL証明書+キー(snakeoil)、CAバンドル、および特定のSSLサイトに使用される一般的なディレクティブを指します。

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


/ etc / apache2 / ssl / privateのアクセス許可に710を設定することを提案する理由がわかりません。ディレクトリ(グループ)の読み取りビットを設定せずにディレクトリ(グループ)の実行ビットを設定することは、あまり意味がありません。750に設定するつもりでしたか?
chriv

@chriv UbuntuのデフォルトSSLエリアでのセットアップの表示に基づいて、アクセス許可を設定します。/ etc / ssl / certsおよび/ etc / ssl / privateおよびssl-certsグループの使用を参照してください。参照してくださいstackoverflow.com/a/23408897/503621
bshea

1
一般的な質問に対する非常にきれいで詳細な説明と、考えられる多くの回答。ありがとうございました。ただ、物事のカップルを追加するために、あなたの<VirtualHost *:443>あなたのセクションはsites-available/mysite.confそうのような証明書が含まれている必要がありますSSLEngine on SSLCertificateFile /etc/apache2/ssl/mysite.crt SSLCertificateKeyFile /etc/apache2/ssl/private/mysite.key
ジョージDimitriadis

ところで-:80と:443の設定を1つのApache ".conf"ファイルに結合することもできます。とにかく:443 / SSLでポート:80にヒットするものはすべてリダイレクトします。また、基本的なSSL設定を.confファイルに追加し、追加の「詳細な」SSL設定ファイルを作成して(たとえば使用される暗号を設定するなど)、仮想領域外のすべての.confファイルに含めることもできます。これらの設定を使用してSSLを少し「強化」し、各仮想サイト.confに含めます。この方法でSSL LabsでA +を取得できます。
bshe

10

ここにすべての答えはOKに見えるが、私は私が見つけた一つのことが問題です...あなたはチェーンファイルを思い付く中間体や根を使用して証明書を連結している場合は言及したいと思います、していないことを中に入れた/etc/ssl/certsときので、c_rehash実行されると、証明書内のルートまたは中間体により、証明書へのハッシュシンボリックリンクが作成される場合があります。

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

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

私が持っていた古い.crtファイルと連結された.pemファイルをクリーンアップした直後/etc/ssl/certs

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


2

個々のファイル/ディレクトリのパーミッションが何かに設定されている場合、危険な場所は本当にありませんchown root :0 private.keyし、chmod 600 private.keyそうrootだけがそれを読むことができます。あなたが言うように、CSRと証明書ファイルはそれほど敏感ではありません。

これらのアクセス許可を使用すると、言及したパスと/ usr / local / sslに問題はありません。


1
多くの場合、秘密鍵にアクセスするアプリケーションは、非ルートユーザーとして実行されます。ssl-certグループへのアクセスを維持することをお勧めします。
シェーンマッデン

1
理解されましたが、ApacheのようなWebサーバーはルート「親」プロセスを生成し、nginxも適切であると想定しています。
ジョナサンロス

1

場所は正しい:

  • /etc/ssl/certs/以下のための.crtファイル
  • /etc/ssl/private以下のための.keyファイル

所有者root:root両方の必要があります(sudo chmod root:root <file>必要に応じて変更するために使用します)。

許可

  • 644以下のための.crtファイル
  • 600以下のための.keyファイル

これはで動作しnginxます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.