如何为服务器生成一个TLS证书

简介: 通过以上步骤,您可以成功地为服务器生成并配置TLS证书,确保网站的安全性。本文涵盖了从生成私钥、创建CSR、使用自签名证书到获取正式证书的详细步骤,并且对每个步骤进行了详细的解释,使即使是非专业人士也能顺利完成TLS证书的配置。

如何为服务器生成TLS证书

TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证书,并对每一步骤进行详细解释。

1. 准备工作

在生成TLS证书之前,您需要确保服务器上安装了OpenSSL,这是一个开源的加密工具包,提供了生成和管理证书所需的工具。

安装OpenSSL

如果您的系统尚未安装OpenSSL,可以通过以下命令安装:

sudo apt-get update
sudo apt-get install openssl -y
​

解释:第一条命令更新包列表,确保获取最新的软件包信息。第二条命令安装OpenSSL工具包。

2. 生成服务器私钥

私钥是用于加密和解密数据的关键组件之一。在生成TLS证书之前,您需要先生成一个私钥。

openssl genrsa -out server.key 2048
​

解释:openssl genrsa 命令生成一个RSA私钥,-out server.key 指定生成的私钥文件名为 server.key2048 是密钥的位数,表示生成一个2048位的RSA私钥。

3. 创建证书签名请求(CSR)

证书签名请求(CSR)是向证书颁发机构(CA)申请签发证书时所需的文件,其中包含了申请者的信息和公钥。

openssl req -new -key server.key -out server.csr
​

解释:openssl req -new 生成一个新的CSR文件,-key server.key 使用之前生成的私钥,-out server.csr 指定输出的CSR文件名为 server.csr

在执行该命令时,系统会提示您输入以下信息:

  • Country Name (2 letter code) :国家代码,例如CN表示中国。
  • State or Province Name (full name) :省份名称,例如Beijing。
  • Locality Name (eg, city) :城市名称,例如Beijing。
  • Organization Name (eg, company) :组织名称,例如My Company Inc。
  • Organizational Unit Name (eg, section) :部门名称,例如IT Department。
  • Common Name (eg, fully qualified domain name) :常用名称,例如您的域名 www.example.com
  • Email Address:联系邮箱。

除了上述信息,还会提示您输入其他一些可选信息,如密码或备用名称,可以直接按回车跳过。

4. 使用自签名证书(可选)

在某些情况下,您可能不需要从证书颁发机构获取正式证书,可以使用自签名证书,这通常用于内部测试或开发环境。

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
​

解释:openssl x509 -req 用于生成自签名证书,-days 365 指定证书的有效期为365天,-in server.csr 指定使用之前生成的CSR文件,-signkey server.key 使用之前生成的私钥进行签名,-out server.crt 指定输出的证书文件名为 server.crt

5. 配置Web服务器

生成TLS证书后,下一步是将其配置到Web服务器中。下面以Apache为例,说明如何配置TLS证书。

配置Apache

  1. 复制证书和私钥文件
    将生成的 server.crtserver.key 文件复制到Apache的配置目录中,通常是 /etc/ssl/certs//etc/ssl/private/

    sudo cp server.crt /etc/ssl/certs/
    sudo cp server.key /etc/ssl/private/
    ​
    

    解释:这两条命令将证书文件和私钥文件分别复制到系统的标准存放目录。

  2. 编辑Apache配置文件
    打开Apache的SSL配置文件,例如 /etc/apache2/sites-available/default-ssl.conf,并做如下修改:

    <VirtualHost *:443>
        ServerAdmin admin@example.com
        ServerName www.example.com
    
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/server.crt
        SSLCertificateKeyFile /etc/ssl/private/server.key
    
        <Directory /var/www/html>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>
    
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    ​
    

    解释:在这里,我们指定了证书和私钥文件的位置,并启用了SSL引擎。ServerName 指定了要保护的域名,<Directory> 块中配置了对Web目录的访问权限。

  3. 启用SSL模块并启用SSL站点

    sudo a2enmod ssl
    sudo a2ensite default-ssl.conf
    sudo systemctl reload apache2
    ​
    

    解释:a2enmod ssl 命令启用Apache的SSL模块,a2ensite 启用SSL站点配置文件,最后使用 systemctl reload apache2 重新加载Apache服务,使配置生效。

6. 获取正式证书(可选)

如果需要将网站公开到互联网上,可以从知名的证书颁发机构(如Let's Encrypt、DigiCert等)申请正式的TLS证书。以Let's Encrypt为例,使用Certbot工具来获取证书。

安装Certbot

sudo apt-get install certbot python3-certbot-apache -y
​

解释:certbot 是Let's Encrypt的官方客户端,python3-certbot-apache 是用于与Apache集成的插件。

获取证书

sudo certbot --apache -d example.com -d www.example.com
​

解释:certbot --apache 通过Apache插件自动配置证书,-d example.com -d www.example.com 为指定的域名获取证书。

自动更新证书

Let's Encrypt的证书有效期通常为90天,因此需要设置自动更新:

sudo crontab -e
​

在cron任务中添加以下行:

0 3 * * * /usr/bin/certbot renew --quiet
​

解释:这条cron任务将会每天凌晨3点自动检查并更新证书。--quiet 参数保证在证书未过期时不会输出任何信息。

7. 验证TLS证书的安装

完成配置后,您可以通过以下方式验证TLS证书是否正常工作:

  1. 使用浏览器访问网站
    在浏览器中访问 https://example.com,并检查地址栏中的安全锁图标,点击它查看证书的详细信息,确认证书已正确安装。

  2. 使用OpenSSL检查证书

    openssl s_client -connect example.com:443
    ​
    

    解释:openssl s_client 命令用于测试SSL/TLS连接,-connect example.com:443 连接到指定的服务器和端口。成功连接后,您可以在输出中查看证书的详细信息。

总结

通过以上步骤,您可以成功地为服务器生成并配置TLS证书,确保网站的安全性。本文涵盖了从生成私钥、创建CSR、使用自签名证书到获取正式证书的详细步骤,并且对每个步骤进行了详细的解释,使即使是非专业人士也能顺利完成TLS证书的配置。

目录
相关文章
|
10月前
|
前端开发 小程序 应用服务中间件
在服务器上正确配置域名https证书(ssl)及为什么不推荐使用宝塔申请免费ssl证书
在服务器上正确配置域名https证书(ssl)及为什么不推荐使用宝塔申请免费ssl证书
401 4
|
9月前
|
网络安全
嗯… 无法访问此页面43.139.210.211 花了太长时间进行响应,无法连接宝塔,是服务器内的宝塔面板开启了ssl的验证,但是没有绑定证书,所以被拦截,关闭宝塔面板的ssl访问认证恢复正常
嗯… 无法访问此页面43.139.210.211 花了太长时间进行响应,无法连接宝塔,是服务器内的宝塔面板开启了ssl的验证,但是没有绑定证书,所以被拦截,关闭宝塔面板的ssl访问认证恢复正常
|
tengine 应用服务中间件 Linux
【Linux环境】如何在Nginx(或Tengine)服务器上安装ssl证书----介绍nginx服务器类型证书的下载与安装操作
【Linux环境】如何在Nginx(或Tengine)服务器上安装ssl证书----介绍nginx服务器类型证书的下载与安装操作
636 0
|
11月前
|
Linux
本地下载使用证书登陆的linux服务器的文件的命令
本地下载使用证书登陆的linux服务器的文件的命令
|
11月前
|
安全 算法 网络安全
windows服务器——部署PKI与证书服务
windows服务器——部署PKI与证书服务
250 0
|
安全 网络安全 Apache
服务器漏洞修复之SSL/TLS协议信息泄露漏洞(CVE-2016-2183)
服务器漏洞修复之SSL/TLS协议信息泄露漏洞(CVE-2016-2183)
7713 0
|
应用服务中间件 网络安全 Apache
解决 Nginx Let&#39;s Encrypt HTTPS 证书 错误: 服务器缺少中间证书
解决 Nginx Let&#39;s Encrypt HTTPS 证书 错误: 服务器缺少中间证书
941 0
解决 Nginx Let&#39;s Encrypt HTTPS 证书 错误: 服务器缺少中间证书
|
数据建模 应用服务中间件 网络安全
宝塔面板部署DV免费证书(web服务器nginx)
宝塔面板部署DV免费证书(web服务器nginx)
宝塔面板部署DV免费证书(web服务器nginx)
关于微信企业付款到零钱X509Certificate2读取证书信息,发布到服务器访问不到的解决方案
关于微信企业付款到零钱X509Certificate2读取证书信息,发布到服务器访问不到的解决方案
275 0
关于微信企业付款到零钱X509Certificate2读取证书信息,发布到服务器访问不到的解决方案
|
网络协议 安全 前端开发
netty系列之: 在netty中使用 tls 协议请求 DNS 服务器
在前面的文章中我们讲过了如何在netty中构造客户端分别使用tcp和udp协议向DNS服务器请求消息。在请求的过程中并没有进行消息的加密,所以这种请求是不安全的。 那么有同学会问了,就是请求解析一个域名的IP地址而已,还需要安全通讯吗?

热门文章

最新文章

下一篇
oss创建bucket