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

根據(jù)圖示,找到自己服務(wù)器上對應(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
說明:之后執(zhí)行的指令都有可能會報上述的錯誤,因此可以在執(zhí)行的指令后面加上【-conifg xxxx】,其中【xxxx】是執(zhí)行指令的服務(wù)器存放openssl配置的地址
注意:執(zhí)行上述指令可能會報出以下錯誤
errог:2406F079: random number generator: RAND_load_file: Cannot open file:сrypto/rand/randfile.c:88: Filename=/root/. rnd
出現(xiàn)該報錯的因為是:缺少生成隨機數(shù)的文件
需要執(zhí)行以下指令:
# 生成隨機數(shù)文件并設(shè)置權(quán)限 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:創(chuàng)建一個新的 RSA 密鑰對,其中包括一個 2048 位的 RSA 私鑰和相應(yīng)的公鑰-nodes:生成的私鑰不使用密碼進(jìn)行加密。這意味著私鑰文件server.key將不需要密碼才能訪問-keyout server.key:指定生成的私鑰文件的輸出路徑和文件名,這里為server.key-subj "/C=CN/ST=BJ/L=BJ/O=MyRootServer/OU=MyServer/CN=xx.xx.xx.xx":設(shè)置證書主題(Subject)的信息。這里使用了簡化的 Distinguished Name (DN),包括了國家(C=CN)、省/州(ST=BJ)、城市(L=BJ)、組織(O=MyRootServer)、組織單位(OU=MyServer)、通用名稱(CN=xx.xx.xx.xx)等信息。通用名稱(CN)通常用于指定服務(wù)器的主機名或 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:設(shè)置生成的證書的有效期為 3650 天(10 年)-in server.csr:指定輸入的證書簽署請求文件,這里為server.csr-CA selfca.crt:指定用于簽署證書的 CA 證書文件,這里為selfca.crt-CAkey selfca.key:指定用于簽署證書的 CA 私鑰文件,這里為selfca.key-CAcreateserial:創(chuàng)建一個新的序列號文件,該文件用于跟蹤 CA 簽署的證書的唯一性-out server.crt:指定生成的證書文件的輸出路徑和文件名,這里為server.crt
四、最終的文件列表
selfca.key:CA私鑰,用于后續(xù)簽名SSL證書selfca.crt:CA根證書,用于后續(xù)簽名SSL證書,需要加入到操作系統(tǒng)或瀏覽器的信任列表中server.key:服務(wù)器私鑰,需要配置到https服務(wù),比如Apache和Nginx配置文件中server.csr:證書簽署請求文件,后續(xù)沒用了server.crt:自簽名SSL證書,需要配置到https服務(wù),比如Apache和Nginx配置文件中,這就是代表服務(wù)器的身份證件
五、查詢證書信息
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/*;
}總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
在Apache服務(wù)器上利用Varnish優(yōu)化移動端訪問的方法
這篇文章主要介紹了在Apach服務(wù)器上利用Varnish優(yōu)化移動端訪問的方法,包括清除緩存等常用操作的介紹,需要的朋友可以參考下2015-06-06
在Linux中為現(xiàn)有用戶創(chuàng)建主目錄:useradd問題
這篇文章主要介紹了在Linux中為現(xiàn)有用戶創(chuàng)建主目錄:useradd問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04

