linux服務(wù)器手動(dòng)生成安全的ssl證書(shū)實(shí)現(xiàn)方式
一、生成CA根證書(shū)(建立可信根)
1.1.創(chuàng)建加密的CA私鑰
使用AES-256加密算法生成2048位RSA私鑰,防止私鑰泄露導(dǎo)致信任鏈被破壞:
openssl genrsa -des3 -out selfca.key 2048
安全要點(diǎn):私鑰必須設(shè)置強(qiáng)密碼(建議16位以上混合字符),并存儲(chǔ)在加密存儲(chǔ)設(shè)備中。
說(shuō)明:
openssl: OpenSSL 工具的命令行執(zhí)行器genrsa: 生成RSA密鑰的命令-des3: 使用Triple-DES算法對(duì)生成的私鑰進(jìn)行加密,這會(huì)在生成私鑰時(shí)要求你設(shè)置一個(gè)密碼,以便在每次使用私鑰時(shí)都需要提供密碼-out selfca.key: 指定生成的私鑰的輸出文件名為selfca.key,私鑰文件將被保存在當(dāng)前工作目錄中2048: 指定生成的RSA私鑰的位數(shù)為2048位,這是一種常見(jiàn)的安全密鑰長(zhǎng)度
1.2.生成CA自簽名證書(shū)
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
說(shuō)明:
openssl req:這是 OpenSSL 工具中用于處理證書(shū)簽署請(qǐng)求(CSR)的命令-new:表示創(chuàng)建新的 CSR-x509:表示生成自簽名的 X.509 證書(shū),而不是生成 CSR-days 3650:設(shè)置證書(shū)的有效期為 3650 天(10 年)-key selfca.key:指定用于生成證書(shū)的私鑰文件為selfca.key-subj "/C=CN/ST=GD/L=ZS/O=SJJ/OU=SJJ/CN=CA": 設(shè)置證書(shū)主題(Subject)的信息。這里使用了簡(jiǎn)化的 Distinguished Name (DN),包括了國(guó)家(C=CN)、省/州(ST=GD)、城市(L=ZS)、組織(O=SJJ)、組織單位(OU=SJJ)、通用名稱(CN=CA)等信息-out selfca.crt: 指定生成的證書(shū)文件的輸出路徑和文件名,這里為selfca.crt
注意:執(zhí)行上述指令可能會(huì)報(bào)出以下錯(cuò)誤
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:
出現(xiàn)該報(bào)錯(cuò)的原因,是由于openssl的配置文件在每臺(tái)服務(wù)器的目錄位置不同,在默認(rèn)的openssl配置路徑找不到對(duì)應(yīng)文件,因此需要執(zhí)行以下指令
# 在常見(jiàn)位置查找配置文件 find / -name "openssl.cnf" 2>/dev/null
執(zhí)行上面的指令后,會(huì)輸出以下內(nèi)容:

根據(jù)圖示,找到自己服務(wù)器上對(duì)應(yīng)的配置文件路徑,然后需要重新執(zhí)行以下指令:
# 重新執(zhí)行生成指令,其中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
說(shuō)明:之后執(zhí)行的指令都有可能會(huì)報(bào)上述的錯(cuò)誤,因此可以在執(zhí)行的指令后面加上【-conifg xxxx】,其中【xxxx】是執(zhí)行指令的服務(wù)器存放openssl配置的地址
注意:執(zhí)行上述指令可能會(huì)報(bào)出以下錯(cuò)誤
errог:2406F079: random number generator: RAND_load_file: Cannot open file:сrypto/rand/randfile.c:88: Filename=/root/. rnd
出現(xiàn)該報(bào)錯(cuò)的因?yàn)槭牵喝鄙偕呻S機(jī)數(shù)的文件
需要執(zhí)行以下指令:
# 生成隨機(jī)數(shù)文件并設(shè)置權(quán)限 openssl rand -out /root/.rnd 2048 chmod 600 /root/.rnd
二、 自簽名SSL證書(shū)
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
說(shuō)明:
openssl req:這是 OpenSSL 工具中用于處理證書(shū)簽署請(qǐng)求(CSR)的命令-newkey rsa:2048:創(chuàng)建一個(gè)新的 RSA 密鑰對(duì),其中包括一個(gè) 2048 位的 RSA 私鑰和相應(yīng)的公鑰-nodes:生成的私鑰不使用密碼進(jìn)行加密。這意味著私鑰文件server.key將不需要密碼才能訪問(wèn)-keyout server.key:指定生成的私鑰文件的輸出路徑和文件名,這里為server.key-subj "/C=CN/ST=BJ/L=BJ/O=MyRootServer/OU=MyServer/CN=xx.xx.xx.xx":設(shè)置證書(shū)主題(Subject)的信息。這里使用了簡(jiǎn)化的 Distinguished Name (DN),包括了國(guó)家(C=CN)、省/州(ST=BJ)、城市(L=BJ)、組織(O=MyRootServer)、組織單位(OU=MyServer)、通用名稱(CN=xx.xx.xx.xx)等信息。通用名稱(CN)通常用于指定服務(wù)器的主機(jī)名或 IP 地址-out server.csr: 指定生成的證書(shū)簽署請(qǐng)求文件的輸出路徑和文件名,這里為 server.csr
三、使用CA根證書(shū)簽名SSL證書(shū)
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 證書(shū)的命令 -req: 表示輸入的文件是證書(shū)簽署請(qǐng)求(CSR)-extfile <(printf "subjectAltName=IP:xx.xx.xx.xx"): 使用擴(kuò)展文件,該文件包含了額外的證書(shū)擴(kuò)展信息。在這里,subjectAltName 擴(kuò)展用于指定主體的備用名稱(Subject Alternative Name),這里指定了 IP 地址 xx.xx.xx.xx。你也可以在方括號(hào)中添加其他主機(jī)名或 IP 地址,用逗號(hào)分隔-days 3650:設(shè)置生成的證書(shū)的有效期為 3650 天(10 年)-in server.csr:指定輸入的證書(shū)簽署請(qǐng)求文件,這里為server.csr-CA selfca.crt:指定用于簽署證書(shū)的 CA 證書(shū)文件,這里為selfca.crt-CAkey selfca.key:指定用于簽署證書(shū)的 CA 私鑰文件,這里為selfca.key-CAcreateserial:創(chuàng)建一個(gè)新的序列號(hào)文件,該文件用于跟蹤 CA 簽署的證書(shū)的唯一性-out server.crt:指定生成的證書(shū)文件的輸出路徑和文件名,這里為server.crt
四、最終的文件列表
selfca.key:CA私鑰,用于后續(xù)簽名SSL證書(shū)selfca.crt:CA根證書(shū),用于后續(xù)簽名SSL證書(shū),需要加入到操作系統(tǒng)或?yàn)g覽器的信任列表中server.key:服務(wù)器私鑰,需要配置到https服務(wù),比如Apache和Nginx配置文件中server.csr:證書(shū)簽署請(qǐng)求文件,后續(xù)沒(méi)用了server.crt:自簽名SSL證書(shū),需要配置到https服務(wù),比如Apache和Nginx配置文件中,這就是代表服務(wù)器的身份證件
五、查詢證書(shū)信息
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; # 生成的證書(shū)
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/*;
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
ubuntu16.04自動(dòng)設(shè)置行號(hào)的步驟詳解
這篇文章主要介紹了ubuntu16.04自動(dòng)設(shè)置行號(hào)的步驟,文中給大家提到了Ubuntu vi設(shè)置行號(hào)的方法,感興趣的朋友跟隨腳本之家小編一起看看吧2018-08-08
Linux實(shí)現(xiàn)DHCP服務(wù)器的搭建
Linux常見(jiàn)的服務(wù)器有幾種,本文詳細(xì)介紹了Linux實(shí)現(xiàn)DHCP服務(wù)器的搭建,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
在Apache服務(wù)器上利用Varnish優(yōu)化移動(dòng)端訪問(wèn)的方法
這篇文章主要介紹了在Apach服務(wù)器上利用Varnish優(yōu)化移動(dòng)端訪問(wèn)的方法,包括清除緩存等常用操作的介紹,需要的朋友可以參考下2015-06-06
CentOS上使用Docker部署OpenClaw的全過(guò)程
這篇文章主要介紹了在阿里云上部署OpenClaw并接入阿里云百煉模型的過(guò)程,詳細(xì)記錄了環(huán)境準(zhǔn)備、部署步驟、訪問(wèn)與使用方法,以及常見(jiàn)問(wèn)題解決方法,需要的朋友可以參考下2026-04-04
在Linux中為現(xiàn)有用戶創(chuàng)建主目錄:useradd問(wèn)題
這篇文章主要介紹了在Linux中為現(xiàn)有用戶創(chuàng)建主目錄:useradd問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04

