> 技术文档 > linux服务器手动生成安全的ssl证书_linux生成ssl证书

linux服务器手动生成安全的ssl证书_linux生成ssl证书


 一、生成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

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

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

 需要执行以下指令:

# 生成随机数文件并设置权限openssl rand -out /root/.rnd 2048chmod 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/*;}

本文参考以下文章:

自建CA并生成自签名SSL证书-----AlbertS

本文章的内容到这就已经结束了,希望文章可以帮到你们,感谢你们的阅读,觉得小编的文章写得不错可以关注小编,我将会不定期更新关于服务器部署应用相关知识的博文。