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