openssl 生成ssl證書詳解

1.概念html

數字證書是一個經證書受權中心數字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件。最簡單的證書包含一個公開密鑰、名稱以及證書受權中心的數字簽名。數字證書還有一個重要的特徵就是隻在特定的時間段內有效。數字證書是一種權威性的電子文檔,能夠由權威公正的第三方機構,即CA(例如中國各地方的CA公司)中心簽發的證書,也能夠由企業級CA系統進行簽發。

通常證書分有三類,根證書、服務器證書和客戶端證書。根證書,是生成服務器證書和客戶端證書的基礎,是信任的源頭,也能夠叫自簽發證書,即CA證書。服務器證書,由根證書籤發,配置在服務器上的證書。客戶端證書,由根證書籤發,配置在服務器上,併發送給客戶,讓客戶安裝在瀏覽器裏的證書。

接下來,認識了證書的基本概念以後,咱們來認識下這幾個概念,公鑰/私鑰/簽名/驗證簽名/加密/解密/對稱加密/非對稱加密。

咱們通常的加密是用一個密碼加密文件,而後解密也用一樣的密碼。這很好理解,這個是對稱加密。而有些加密時,加密用的一個密碼,而解密用另一組密碼,這個叫非對稱加密,意思就是加密解密的密碼不同。其實這是數學上的一個素數積求因子的原理應用,其結果就是用這一組密鑰中的一個來加密數據,用另外一個來解密,或許有人已經想到了,沒錯這就是所謂的公鑰和私鑰。公鑰和私鑰均可以用來加密數據,而他們的區別是,公鑰是密鑰對中公開的部分,私鑰則是非公開的部分。公鑰加密數據,而後私鑰解密的狀況被稱爲加密和解密;私鑰加密數據,公鑰解密通常被稱爲簽名和驗證簽名。其中籤名和驗證簽名就是咱們本文須要說明和用到的,由於證書的生成過程當中就須要簽名,而證書的使用則須要驗證簽名。

2.環境linux

Linux系統,我用的Ubuntu19.10nginx

3.查看openssl以及默認openssl.cnf存放位置算法

openssl version -a

output:vim

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.指明證書的開始編號session

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
相關文章
相關標籤/搜索