1.概念
數字證書是一個經證書授權中心數字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件。最簡單的證書包含一個公開密鑰、名稱以及證書授權中心的數字簽名。數字證書還有一個重要的特征就是只在特定的時間段內有效。數字證書是一種權威性的電子文檔,可以由權威公正的第三方機構,即CA(例如中國各地方的CA公司)中心簽發的證書,也可以由企業級CA系統進行簽發。
一般證書分有三類,根證書、服務器證書和客戶端證書。根證書,是生成服務器證書和客戶端證書的基礎,是信任的源頭,也可以叫自簽發證書,即CA證書。服務器證書,由根證書簽發,配置在服務器上的證書。客戶端證書,由根證書簽發,配置在服務器上,並發送給客戶,讓客戶安裝在瀏覽器里的證書。
接下來,認識了證書的基本概念之后,我們來認識下這幾個概念,公鑰/私鑰/簽名/驗證簽名/加密/解密/對稱加密/非對稱加密。
我們一般的加密是用一個密碼加密文件,然后解密也用同樣的密碼。這很好理解,這個是對稱加密。而有些加密時,加密用的一個密碼,而解密用另外一組密碼,這個叫非對稱加密,意思就是加密解密的密碼不一樣。其實這是數學上的一個素數積求因子的原理應用,其結果就是用這一組密鑰中的一個來加密數據,用另一個來解密,或許有人已經想到了,沒錯這就是所謂的公鑰和私鑰。公鑰和私鑰都可以用來加密數據,而他們的區別是,公鑰是密鑰對中公開的部分,私鑰則是非公開的部分。公鑰加密數據,然后私鑰解密的情況被稱為加密和解密;私鑰加密數據,公鑰解密一般被稱為簽名和驗證簽名。其中簽名和驗證簽名就是我們本文需要說明和用到的,因為證書的生成過程中就需要簽名,而證書的使用則需要驗證簽名。
2.環境
Linux系統,我用的Ubuntu19.10
3.查看openssl以及默認openssl.cnf存放位置
openssl version -a
output:
OpenSSL 1.1.1c 28 May 2019
built on: Tue Aug 20 11:46:33 2019 UTC
platform: debian-amd64
options: bn(64,64) rc4(16x,int) des(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -fdebug-prefix-map=/build/openssl-D7S1fy/openssl-1.1.1c=. -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2
OPENSSLDIR: "/usr/lib/ssl"
ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-1.1"
Seeding source: os-specific
看到默認位置為OPENSSLDIR: "/usr/lib/ssl" 所以配置文件在本目錄下
4.查看配置文件 vim /usr/lib/ssl/openssl.cnf
[ CA_default ]
dir = ./demoCA # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
#unique_subject = no # Set to 'no' to allow creation of
# several certs with same subject.
new_certs_dir = $dir/newcerts # default place for new certs.
certificate = $dir/cacert.pem # The CA certificate
serial = $dir/serial # The current serial number
crlnumber = $dir/crlnumber # the current crl number
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/cakey.pem# The private key
x509_extensions = usr_cert
5..創建為根證書CA所需的目錄及文件,根據配置文件創建demoCA文件夾,以及各種文件
sudo mkdir /usr/lib/ssl/demoCA
cd /usr/lib/ssl/demoCA
mkdir -pv {certs,crl,newcerts,private}
touch {serial,index.txt}
6.指明證書的開始編號
echo 01 >> serial
7.生成根證書的私鑰(注意:私鑰的文件名與存放位置要與配置文件中的設置相匹配)
(umask 077; openssl genrsa -out private/cakey.pem 2048)
參數說明:
genrsa --產生rsa密鑰命令
-aes256--使用AES算法(256位密鑰)對產生的私鑰加密,這里沒有此參數,則只是用了rsa算法加密。
-out ---輸出路徑,這里指private/ca.key.pem
這里的參數2048,指的是密鑰的長度位數,默認長度為512位
8.生成自簽證書,即根證書CA,自簽證書的存放位置也要與配置文件中的設置相匹配,生成證書時需要填寫相應的信息。注意Common Name 填寫 localhost
openssl req -new -x509 -key /usr/lib/ssl/demoCA/private/cakey.pem -out cacert.pem -days 365
參數說明:
參數說明:
-new:表示生成一個新證書簽署請求
-x509:專用於CA生成自簽證書,如果不是自簽證書則不需要此項
-key:用到的私鑰文件
-out:證書的保存路徑
-days:證書的有效期限,單位是day(天),默認是openssl.cnf的default_days
ls /usr/lib/ssl/demoCA
cacert.pem
由上看到cacert.pem CA根證書生成
9.配置服務器證書ssl
①由任意位置目錄執行,生成nginx.key
(umask 077; openssl genrsa -out nginx.key 2048)
②生成證書簽署請求
需要根據提示填寫對應信息,但是必須和根證書的CA相同,唯一不同的是Common Name 為你的域名如(www.nginxs.com)
openssl req -new -key nginx.key -out nginx.csr -days 365
③在根證書服務器上頒發證書
#我們創建一個req文件夾來接受服務器發送過來的文件(簽署請求的csr文件、key文件等)
sudo mkdir /usr/lib/ssl/demoCA/req
#頒發證書,先把csr,key文件拷貝到req目錄然后
sudo openssl ca -in /usr/lib/ssl/demoCAreq/nginx.csr -out /usr/lib/ssl/demoCA/certs/nginx.crt -days 365
# 注意路徑一定不要錯
經過上面步驟在/usr/lib/ssl/demoCA/certs目錄生成了nginx.crt文件
此時nginx.key和nginx.crt文件都已經生成,配置ssl證書完成
10.配置nginx ssl
①新建配置文件
vim /etc/nginx/nginx_https.conf
server
{
listen 443;# https 監聽的是 443端口
server_name 本機IP(192.168.0.0) www.nginxs.com;
keepalive_timeout 100;
ssl on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_certificate /etc/nginx/ssl_key/nginx.crt; # 證書路徑
ssl_certificate_key /etc/nginx/ssl_key/nginx.key; # 請求認證 key 的路徑
index index.html index.htm;
location / {
root /opt/app/code;
}
}
注意上面的IP和域名是你配置根證書和服務器證書時填寫的內容
②測試,因為域名隨便寫的,所以在本地測試
配置本地hosts,加入
192.168.0.0 www.nginxs.com
③重啟網絡
service network-manager restart
④重啟nginx
systemctl restart nginx
11.測試nginx
https://www.nginxs.com
如果出現nginx的界面即大功告成
12.本文參考
https://blog.csdn.net/qq_15092079/article/details/82149807#commentBox