在 Ubuntu 上,用于签署证书(供 nginx 使用)的私钥的最佳位置似乎是/etc/ssl/private/
这回答补充说证书应该放进去,/etc/ssl/certs/
但那似乎是一个不安全的地方。.crt
文件是否需要安全保存,还是被视为公开文件?
答案1
.crt 文件被发送到所有连接的设备;它是公开的。(chown root:root
和chmod 644
)
要添加到私钥位置;请确保您正确地保护它并将其放在那里。(chown root:ssl-cert
和chmod 640
)
答案2
只要你妥善保护你的私钥文件。公共证书是公开的;不需要保护 - 服务器特权或其他。
为了扩展答案,我不使用默认位置/etc/ssl
。
由于备份+其他原因,将所有文件保存在单独的区域对我来说更容易。
对于 Apache SSL,我将其保存在/etc/apache2/ssl/private
或类似的“根区域”中/etc/apache2
。
示例设置
这篇文章针对的是 Ubuntu (Debian) + Apache,但应该适用于大多数系统。
只需应用权限并更新给定配置(apache/nginx/etc)中的位置/路径即可。
此答案还假设您未使用 LetsEncrypt/Certbot 或某些自动 SSL 服务。您已购买或创建 SSL 证书并已获取文件包。
如果 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
支持ssl-cert
Ubuntu下的群组。(看评论)
将权限设置为700
开启/etc/apache2/ssl/private
也可以正常工作。
放置 SSL 文件:
放在民众SSL 证书和中级证书位于:(/etc/apache2/ssl
这些*.crt
通常是文件)
将相应的私人的SSL 密钥位于:(
/etc/apache2/ssl/private
这些是*.key
文件,通常没有扩展名)
注意:LetsEncrypt/Certbot 对所有 SSL 文件(公有、中间链和私有)使用“.pem”扩展名。但是,您不需要移动(或保护)这些文件。它们已经就位并受到保护。只需在您的 Apache“.conf”中直接调用它们即可。
设置所有者:
注意 - 如果您没有SSL 证书组,只需跳过第二行:
sudo chown -R root:root /etc/apache2/ssl/
sudo chown -R root:ssl-cert /etc/apache2/ssl/private/
设置权限:
公共证书
sudo chmod 644 /etc/apache2/ssl/*.crt
私钥
sudo chmod 640 /etc/apache2/ssl/private/*.key
注意:
由于 Ubuntu ssl-cert 组的原因,私钥的组权限设置为读取 (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 证书+密钥 (snakeoil)、CA 捆绑包以及常见的指令用于给定的 SSL 站点。
复制后,只需编辑新的 .conf 文件并根据需要使用上述新信息/路径添加/删除/更新它,然后执行sudo a2ensite mysiteexample-ssl
以启用它。重新加载/重新启动 apache2。测试。
答案3
这里的所有答案似乎都还可以,但我想提一下我发现的一个问题...如果您必须将您的证书与中间件或根连接起来以形成链文件,不将其放入/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
答案4
如果将单个文件/目录的权限设置为只有 root 可以读取,那么实际上并不存在不安全的地方chown root :0 private.key
。chmod 600 private.key
正如您所说,CSR 和证书文件不太敏感。
有了这些权限,您提到的路径和 /usr/local/ssl 应该没问题。