在 Ubuntu 服务器上保存 SSL 证书和私钥的最佳位置?

Ada*_*son 73 ubuntu ssl debian openssl ssl-certificate

在 Ubuntu 上,用于签署证书(供 nginx 使用)的私钥的最佳位置似乎在 /etc/ssl/private/

这个答案补充说证书应该进入,/etc/ssl/certs/但这似乎是一个不安全的地方。做.crt文件需要保持安全或者他们认为公众?

Sha*_*den 53

.crt 文件被发送到所有连接的地方;它是公开的。(chown root:rootchmod 644)

添加到私钥位置;确保您正确固定它并将其放在那里。(chown root:ssl-certchmod 640)

  • 不必如此;目录是0750,所以组外的任何用户都无法遍历目录读取文件。 (2认同)
  • 看起来 ssl-cert 是 ubuntu 上的无效组名。也许它应该改为 chown root:root (2认同)

B. *_*hea 43

只要您正确保护您的私钥文件,将它们放在哪里并不重要。该公证书是公开的; 不需要保护 - 服务器特权或其他。

为了扩展答案,我不使用默认位置/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
Run Code Online (Sandbox Code Playgroud)

注意:
chmod 710支持ssl-certUbuntu 下的组。
(请参阅评论)
将权限设置为700on/etc/apache2/ssl/private也可以正常工作。

放置 SSL 文件:

公共www ssl 证书和中间证书 /etc/apache2/ssl
放入 Put私有ssl 密钥中/etc/apache2/ssl/private

设置所有者:

sudo chown -R root:root /etc/apache2/ssl/
sudo chown -R root:ssl-cert /etc/apache2/ssl/private/
Run Code Online (Sandbox Code Playgroud)

注意:
如果您没有ssl-cert组,只需在上面的行中使用 'root:root' 或跳过第二行。

设置权限:

公共证书

sudo chmod 644 /etc/apache2/ssl/*.crt
Run Code Online (Sandbox Code Playgroud)

私钥

sudo chmod 640 /etc/apache2/ssl/private/*.key
Run Code Online (Sandbox Code Playgroud)

注意:
由于 Ubuntu ssl-cert 组,组权限设置为 READ (640)。“600”也不错。

启用 Apache SSL 模块

sudo a2enmod ssl
Run Code Online (Sandbox Code Playgroud)

编辑任何 Apache 站点文件并启用

(见最后一段)*

sudo nano /etc/apache/sites-available/mysiteexample-ssl.conf
sudo a2ensite mysiteexample-ssl
#             ^^^^^^^^^^^^^^^^^ <-Substitute your ".conf" filename(s)
Run Code Online (Sandbox Code Playgroud)

重启Apache2服务

sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

或者

sudo systemctl restart apache2.service
Run Code Online (Sandbox Code Playgroud)

完毕。测试您的新 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以启用它。

  • 对一个通用问题的非常详细的解释,并有许多可能的答案。谢谢。只需添加几件事,“sites-available/mysite.conf”中的“&lt;VirtualHost *:443&gt;”部分应包含如下证书:“SSLEngine on”“SSLCertificateFile /etc/apache2/ssl/mysite” .crt``SSLCertificateKeyFile /etc/apache2/ssl/private/mysite.key` (2认同)

小智 13

这里的所有答案似乎都不错,但我想提一下我发现的一件事是一个问题...如果您必须将您的证书与中间件或根连接起来以提供链文件,请不要将其放入/etc/ssl/certs,因为当c_rehash运行时,由于其中的根或中间体,它可能会为您的证书创建哈希符号链接。

然后,如果您的证书已过期并且您删除了它们,并且不知道要重新运行c_rehash,那么您可能已经破坏了/etc/ssl/certs目录中的哈希符号链接,并且当您的本地计算机尝试通过以下方式连接到自身时,就会发生奇怪的事情SSL,它找不到要验证的根。例如,使用 curl 我突然开始得到:

curl: (60) SSL certificate problem: unable to get issuer certificate
Run Code Online (Sandbox Code Playgroud)

在清理了一些旧的 .crt 和连接的 .pem 文件后不久,我在/etc/ssl/certs.

至少将您的链条存放在其他地方可以避免这个问题。我最终制作了一个/etc/ssl/local_certs来保存我的证书和链,所以它们不会在你会发现的 CA 证书的混乱中丢失/etc/ssl/certs


Rae*_*nha 10

位置正确:

  • /etc/ssl/certs/对于.crt文件
  • /etc/ssl/private对于.key文件

所有者

  • root:root为了/etc/ssl/certs
  • root:ssl-cert为了/etc/ssl/private

权限

  • 644对于.crt文件
  • 600对于.key文件

这适用于nginx.