linux服务器手动生成安全的ssl证书实现方式

 更新时间:2026年04月16日 11:31:33   作者:friend_X  
文章介绍了生成CA根证书和自签名SSL证书的过程,包括创建CA私钥、生成CA自签名证书、生成服务器私钥和证书签署请求、使用CA根证书签名SSL证书等步骤,最后提供了最终的文件列表和Nginx配置使用总结

一、生成CA根证书(建立可信根)

1.1.创建加密的CA私钥

使用AES-256加密算法生成2048位RSA私钥,防止私钥泄露导致信任链被破坏:

openssl genrsa -des3 -out selfca.key 2048

安全要点:私钥必须设置强密码(建议16位以上混合字符),并存储在加密存储设备中。

说明:

  • openssl: OpenSSL 工具的命令行执行器
  • genrsa: 生成RSA密钥的命令
  • -des3: 使用Triple-DES算法对生成的私钥进行加密,这会在生成私钥时要求你设置一个密码,以便在每次使用私钥时都需要提供密码
  • -out selfca.key: 指定生成的私钥的输出文件名为 selfca.key,私钥文件将被保存在当前工作目录中
  • 2048: 指定生成的RSA私钥的位数为2048位,这是一种常见的安全密钥长度

1.2.生成CA自签名证书

openssl req -new -x509 -days 3650 -key selfca.key -subj "/C=CN/ST=GD/L=ZS/O=SJJ/OU=SJJ/CN=CA" -out selfca.crt

说明:

  • openssl req:这是 OpenSSL 工具中用于处理证书签署请求(CSR)的命令
  • -new:表示创建新的 CSR
  • -x509:表示生成自签名的 X.509 证书,而不是生成 CSR
  • -days 3650:设置证书的有效期为 3650 天(10 年)
  • -key selfca.key:指定用于生成证书的私钥文件为 selfca.key
  • -subj "/C=CN/ST=GD/L=ZS/O=SJJ/OU=SJJ/CN=CA": 设置证书主题(Subject)的信息。这里使用了简化的 Distinguished Name (DN),包括了国家(C=CN)、省/州(ST=GD)、城市(L=ZS)、组织(O=SJJ)、组织单位(OU=SJJ)、通用名称(CN=CA)等信息
  • -out selfca.crt 指定生成的证书文件的输出路径和文件名,这里为 selfca.crt

注意:执行上述指令可能会报出以下错误

Can't open "/usr/local/ssl/openssl.cnf" for reading, No such file or directory 40F7B4C4377F0000:error:80000002:system library:(unknown function):No such file or directory:crypto/bio/bss_file.c:67:calling fopen(/usr/local/ssl/openssl.cnf, r) 40F7B4C4377F0000:error:10000080:BIO routines:(unknown function):no such file:crypto/bio/bss_file.c:75:

出现该报错的原因,是由于openssl的配置文件在每台服务器的目录位置不同,在默认的openssl配置路径找不到对应文件,因此需要执行以下指令

# 在常见位置查找配置文件
find / -name "openssl.cnf" 2>/dev/null

执行上面的指令后,会输出以下内容:

根据图示,找到自己服务器上对应的配置文件路径,然后需要重新执行以下指令:

# 重新执行生成指令,其中xxxx是由上述图例的目录地址替换,而我的案例是替换成【/usr/local/openssl/ssl/openssl.cnf】

openssl req -new -x509 -days 3650 -key selfca.key  -subj "/C=CN/ST=GD/L=ZS/O=SJJ/OU=SJJ/CN=CA" -out selfca.crt  -config xxxx

说明:之后执行的指令都有可能会报上述的错误,因此可以在执行的指令后面加上【-conifg xxxx】,其中【xxxx】是执行指令的服务器存放openssl配置的地址

注意:执行上述指令可能会报出以下错误

errог:2406F079: random number generator: RAND_load_file: Cannot open file:сrypto/rand/randfile.c:88: Filename=/root/. rnd

出现该报错的因为是:缺少生成随机数的文件

 需要执行以下指令:

# 生成随机数文件并设置权限
openssl rand -out /root/.rnd 2048

chmod 600 /root/.rnd

二、 自签名SSL证书

openssl req -newkey rsa:2048 -nodes -keyout server.key -subj "/C=CN/ST=GD/L=ZS/O=SJJ/OU=SJJ/CN=xx.xx.xx.xx" -out server.csr

说明:

  • openssl req:这是 OpenSSL 工具中用于处理证书签署请求(CSR)的命令
  • -newkey rsa:2048:创建一个新的 RSA 密钥对,其中包括一个 2048 位的 RSA 私钥和相应的公钥
  • -nodes:生成的私钥不使用密码进行加密。这意味着私钥文件 server.key 将不需要密码才能访问
  • -keyout server.key:指定生成的私钥文件的输出路径和文件名,这里为 server.key
  • -subj "/C=CN/ST=BJ/L=BJ/O=MyRootServer/OU=MyServer/CN=xx.xx.xx.xx":设置证书主题(Subject)的信息。这里使用了简化的 Distinguished Name (DN),包括了国家(C=CN)、省/州(ST=BJ)、城市(L=BJ)、组织(O=MyRootServer)、组织单位(OU=MyServer)、通用名称(CN=xx.xx.xx.xx)等信息。通用名称(CN)通常用于指定服务器的主机名或 IP 地址
  • -out server.csr: 指定生成的证书签署请求文件的输出路径和文件名,这里为 server.csr

三、使用CA根证书签名SSL证书

openssl x509 -req -extfile <(printf "subjectAltName=IP:xx.xx.xx.xx") -days 3650 -in server.csr -CA selfca.crt -CAkey selfca.key -CAcreateserial -out server.crt
  •  openssl x509: 这是 OpenSSL 工具中用于处理 X.509 证书的命令
  • -req: 表示输入的文件是证书签署请求(CSR)
  • -extfile <(printf "subjectAltName=IP:xx.xx.xx.xx"): 使用扩展文件,该文件包含了额外的证书扩展信息。在这里,subjectAltName 扩展用于指定主体的备用名称(Subject Alternative Name),这里指定了 IP 地址 xx.xx.xx.xx。你也可以在方括号中添加其他主机名或 IP 地址,用逗号分隔
  • -days 3650:设置生成的证书的有效期为 3650 天(10 年)
  • -in server.csr:指定输入的证书签署请求文件,这里为 server.csr
  • -CA selfca.crt:指定用于签署证书的 CA 证书文件,这里为 selfca.crt
  • -CAkey selfca.key:指定用于签署证书的 CA 私钥文件,这里为 selfca.key
  • -CAcreateserial:创建一个新的序列号文件,该文件用于跟踪 CA 签署的证书的唯一性
  • -out server.crt:指定生成的证书文件的输出路径和文件名,这里为 server.crt

四、最终的文件列表

  • selfca.key:CA私钥,用于后续签名SSL证书
  • selfca.crt:CA根证书,用于后续签名SSL证书,需要加入到操作系统或浏览器的信任列表中
  • server.key:服务器私钥,需要配置到https服务,比如Apache和Nginx配置文件中
  • server.csr:证书签署请求文件,后续没用了
  • server.crt:自签名SSL证书,需要配置到https服务,比如Apache和Nginx配置文件中,这就是代表服务器的身份证件

五、查询证书信息

openssl x509 -text -noout -in server.crt

六、nginx配置使用

user root;
worker_processes 2;
events {
    worker_connections 1024;
}
http {
    include mime.types; 
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;
    gzip on; 
    server_tokens off; 
    underscores_in_headers on; 
    add_header x-Content-Typе-Options nosniff; 
    reset_timedout_connection on;
    server {
        listen 443 ssl; 
        server_name localhost; 
        ssl_certificate /usr/share/nginx/ssl/server.crt;  # 生成的证书
        ssl_certificate_key /usr/share/nginx/ssl/server.key; # 生成的秘钥
        ssl_session_cache shared:SSL:lm; 
        ssl_session_timeout 5m;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
        ssl_prefer_server_ciphers on;
        client_max_body_size 1000M;
        location / {
            root html; 
            index index.html index.htm;
        }
    }
    include servers/*;
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 5款最佳的免费Linux杀毒软件

    5款最佳的免费Linux杀毒软件

    Linux的安全性毋庸置疑。很多Linux新手都这样认为,但是Linux同样也有可能遭受病毒的侵袭。这篇文章主要介绍了5款最佳的免费Linux杀毒软件,需要的朋友可以参考下
    2014-06-06
  • Linux命令之firewalld的用法

    Linux命令之firewalld的用法

    这篇文章主要介绍了Linux命令之firewalld的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Linux虚拟机根目录磁盘扩容方式

    Linux虚拟机根目录磁盘扩容方式

    VMware虚拟机扩展磁盘空间并进行逻辑卷管理的步骤,包括关闭虚拟机、扩展磁盘大小、启动虚拟机、查看磁盘使用情况、创建磁盘分区、初始化为物理卷、加入逻辑卷组、扩展卷组容量、查看根目录文件系统、扩容根目录文件系统以及验证扩容后的磁盘容量
    2024-12-12
  • Linux curl表单登录或提交与cookie使用详解

    Linux curl表单登录或提交与cookie使用详解

    这篇文章主要给大家介绍了关于Linux curl表单登录或提交与cookie使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Linux系统具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • ubuntu16.04自动设置行号的步骤详解

    ubuntu16.04自动设置行号的步骤详解

    这篇文章主要介绍了ubuntu16.04自动设置行号的步骤,文中给大家提到了Ubuntu vi设置行号的方法,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-08-08
  • Linux实现DHCP服务器的搭建

    Linux实现DHCP服务器的搭建

    Linux常见的服务器有几种,本文详细介绍了Linux实现DHCP服务器的搭建,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 在Apache服务器上利用Varnish优化移动端访问的方法

    在Apache服务器上利用Varnish优化移动端访问的方法

    这篇文章主要介绍了在Apach服务器上利用Varnish优化移动端访问的方法,包括清除缓存等常用操作的介绍,需要的朋友可以参考下
    2015-06-06
  • Linux内存管理和寻址详细介绍

    Linux内存管理和寻址详细介绍

    大家好,本篇文章主要讲的是Linux内存管理和寻址详细介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • CentOS上使用Docker部署OpenClaw的全过程

    CentOS上使用Docker部署OpenClaw的全过程

    这篇文章主要介绍了在阿里云上部署OpenClaw并接入阿里云百炼模型的过程,详细记录了环境准备、部署步骤、访问与使用方法,以及常见问题解决方法,需要的朋友可以参考下
    2026-04-04
  • 在Linux中为现有用户创建主目录:useradd问题

    在Linux中为现有用户创建主目录:useradd问题

    这篇文章主要介绍了在Linux中为现有用户创建主目录:useradd问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04

最新评论