Linux 添加HTTPS证书

Linux服务器配置HTTPS证书指南
本文介绍了如何在Linux系统中为Nginx服务器添加HTTPS证书,包括上传证书文件、编辑配置文件、检查hosts条目及重启Nginx服务的详细步骤。

之前的文章是linux 做反向代理!
现在继续添加证书。

cd /etc/nginx/conf.d

输入rz 回车上传证书文件
9358.com.crt
9358.com.key

需要编辑两个文件
vi 9358.conf

server{
        listen 80;
        server_name 9358.com;
        #做301将http跳转到https
        return    301 https://$server_name$request_uri;
}


server {
        listen 443 ssl;
        server_name 9358.com;
        root   html;
        ssl on;
        ssl_certificate /etc/nginx/conf.d/9358.com.crt;
        ssl_certificate_key /etc/nginx/conf.d/9358.com.key;
        ssl_session_timeout 5m;
        ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers 
<think>我们正在讨论的是在Linux系统中添加HTTPS证书(特别是根证书)的方法。根据用户的要求,需要参考站内引用内容,并结合用户上一次的问题(关于git的SSL证书错误)来提供解决方案。 用户引用的内容主要涉及: 引用[1]:在Linux添加证书和二级证书到信任列表,包括格式转换和更新信任库。 引用[2]:自签名HTTPS证书的注意事项,强调自签名证书仅用于测试环境。 引用[3]:Let's Encrypt证书的路径示例(用于nginx配置)。 引用[4]和[5]:添加证书到信任列表以及可能出现的错误(证书不受信任)。 用户的问题:在Linux系统中添加HTTPS证书的解决办法。 注意:添加HTTPS证书到系统信任列表,通常是指将证书颁发机构(CA)的根证书添加到系统级的信任存储中,这样系统上的应用程序(如curl, git, wget等)就会信任由该CA签发的证书。 解决方案: 1. 获取证书文件(可以是根证书或中间证书)。 2. 将证书转换为正确的格式(通常是PEM格式)。 3. 将证书复制到系统证书目录,或者添加到系统证书捆绑文件中。 4. 更新系统的证书信任列表。 具体步骤: 步骤1:获取证书 - 如果证书是来自受信任的CA(如Let's Encrypt),通常系统已经内置,无需手动添加。 - 如果是自签名证书或私有CA,需要获取该证书文件(通常为.crt, .cer, .pem等格式)。 步骤2:转换证书格式(如果需要) 引用[1]提供了转换示例: - 将DER格式(.cer)转换为PEM格式: ```bash openssl x509 -inform der -in twca.cer -out twca.pem ``` - 将CRT格式转换为PEM格式(如果已经是PEM格式则不需要): ```bash openssl x509 -in xxxx.crt -out xxxx.pem -outform PEM ``` 步骤3:将证书添加到系统信任存储 不同Linux发行版的证书存储位置和更新命令可能不同。常见的两种情况: ### 对于基于Debian/Ubuntu的系统: 证书存储在`/usr/local/share/ca-certificates/`目录下,然后使用`update-ca-certificates`命令更新。 1. 将PEM格式的证书复制到指定目录(建议创建一个子目录,如`/usr/local/share/ca-certificates/extra/`): ```bash sudo cp twca.pem /usr/local/share/ca-certificates/extra/twca.crt # 注意扩展名必须是.crt ``` 2. 更新信任库: ```bash sudo update-ca-certificates ``` ### 对于基于RHEL/CentOS/Fedora的系统: 证书存储在`/etc/pki/ca-trust/source/anchors/`目录下,然后使用`update-ca-trust`命令更新。 1. 将证书复制到该目录: ```bash sudo cp twca.pem /etc/pki/ca-trust/source/anchors/ ``` 2. 更新信任库: ```bash sudo update-ca-certificates # 或者使用 update-ca-trust(在较新的系统中) ``` 另一种通用方法是直接追加到证书捆绑文件(如`/etc/ssl/certs/ca-certificates.crt`或`/etc/pki/tls/certs/ca-bundle.crt`)。引用[1]中使用了追加到`/etc/pki/tls/certs/ca-bundle.crt`: ```bash cat twca.pem >> /etc/pki/tls/certs/ca-bundle.crt ``` 但这种方法不够规范,建议优先使用系统提供的更新工具。 步骤4:验证 使用curl测试: ```bash curl https://your-server.com ``` 如果之前出现证书错误,现在应该消失。也可以使用`-v`参数查看详细SSL握手过程。 特殊情况:自签名证书 引用[2]提到,自签名证书通常不被信任,所以需要在客户端手动添加信任。但如果是内部私有CA,则可以将该CA的根证书添加到系统信任列表中,这样由该CA签发的所有证书都会被信任。 注意:Let's Encrypt证书 引用[3]提到了Let's Encrypt证书的路径,这种证书通常已经被系统信任(如果系统信任Let's Encrypt的根证书),所以一般不需要手动添加。如果需要配置在nginx中,只需在配置中指定证书和私钥的路径即可。 引用[5]中的错误示例: 错误信息`Certificateissignedbyanuntrustedissuer`表明签发的CA不受信任,因此需要将对应的CA根证书添加到系统信任列表中。 总结步骤(以Ubuntu添加私有CA为例): 1. 获取CA的根证书(假设为`root-ca.cer`,DER格式)。 2. 转换为PEM格式: ```bash openssl x509 -inform der -in root-ca.cer -out root-ca.pem ``` 3. 将证书复制到本地证书目录并更新: ```bash sudo cp root-ca.pem /usr/local/share/ca-certificates/root-ca.crt sudo update-ca-certificates ``` 4. 验证更新: ```bash curl https://your-server-with-ca-signed-cert.com ``` 如果问题仍未解决,可能需要检查: - 证书链是否完整(除了根证书,中间证书也需要?) - 应用程序是否使用了系统的证书存储(有些程序可能使用自己的证书存储,如Java) 生成的相关问题: 1. 如何为内部网络创建私有CA并签名证书? 2. Linux系统中不同应用程序(如curl, wget, git)如何验证HTTPS证书? 3. 在Docker容器中如何添加证书? </think>### Linux系统中添加HTTPS证书的完整指南 在Linux系统中添加HTTPS证书主要涉及将证书添加到系统信任列表,确保应用程序(如curl、git、nginx等)能正确验证SSL/TLS连接。以下是具体解决方案: --- #### 一、添加证书到系统信任列表(推荐方法) 适用于解决证书验证错误(如"untrusted issuer"错误)[^1][^5] 1. **获取证书文件** - 从目标网站下载证书链: ```bash openssl s_client -showcerts -connect example.com:443 </dev/null 2>/dev/null | awk '/BEGIN CERT/,/END CERT/' > cert-chain.pem ``` - 或直接向管理员索取根证书(`.crt`或`.pem`格式) 2. **转换证书格式(如需)** 将DER格式转为PEM格式: ```bash openssl x509 -inform der -in ca.cer -out ca.pem # .cer转.pem[^1] openssl x509 -in ca.crt -out ca.pem -outform PEM # .crt转.pem[^1] ``` 3. **添加到系统信任库** - **Debian/Ubuntu**: ```bash sudo cp ca.pem /usr/local/share/ca-certificates/ sudo update-ca-certificates ``` - **RHEL/CentOS**: ```bash sudo cp ca.pem /etc/pki/ca-trust/source/anchors/ sudo update-ca-trust ``` 4. **验证配置** ```bash curl -v https://example.com # 检查是否仍有证书错误 ``` --- #### 二、为特定服务配置证书(以Nginx为例) 适用于自签名证书或私有CA证书[^2][^3] 1. **生成自签名证书** ```bash sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/nginx/ssl/nginx.key \ -out /etc/nginx/ssl/nginx.crt ``` 2. **配置Nginx**[^3] ```nginx server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; # 完整链配置(如适用) ssl_trusted_certificate /etc/nginx/ssl/ca-bundle.pem; } ``` 3. **重启服务** ```bash sudo systemctl restart nginx # 或 sudo service nginx restart[^2] ``` --- #### 三、临时解决方案(测试环境使用) 1. **跳过证书验证(不推荐)** ```bash curl -k https://example.com # -k忽略证书验证[^1] ``` 2. **手动指定证书路径** ```bash curl --cacert /path/to/custom/ca.pem https://example.com[^1] ``` --- #### 关键注意事项: 1. **证书类型区别** - **自签名证书**:适用于开发/测试环境,浏览器会显示"不安全"警告[^2] - **CA签名证书**:生产环境必需(如Let's Encrypt)[^3] ```bash # Let's Encrypt证书典型路径 /etc/letsencrypt/live/domain.com/fullchain.pem ``` 2. **证书链完整性** 必须包含完整的证书链(根证书+中间证书),否则会出现错误: ```bash Certificate issuer: CN=TWCASecure SSL Certification Authority...[^5] ``` 3. **信任库更新后** 重启依赖服务(如Docker、Java应用)确保加载新证书 > **安全警告**:自签名证书仅限内部使用,面向公众的服务必须使用受信CA(如Let's Encrypt)签发的证书[^2][^3]。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值