Web Server支持HTTPS訪問需要兩個文件,私鑰和證書。私鑰和證書都放在服務器上,私鑰用來加密數據,證書傳遞給客戶端。自己簽名的證書在傳遞給瀏覽器的時,因為證書不被信任,所以會彈出連接不安全,一般點高級->繼續瀏覽,還是可以訪問網頁。如果我們的證書被根證書廠商簽名過的話,就不會彈出不安全的提示,瀏覽器地址欄一般還有綠色小鎖標志。以下來說一下怎么一步步生成證書。
1. 使用openssl生成私鑰文件server.key,以下的步驟都是在Ubuntu上的使用openssl操作的,需要注意一下Ubuntu的系統時間,不要制作出來的證書是過期的。
openssl genrsa -out server.key 2048
2.1 修改 openssl.cnf,因為我之前在做這部分的時候,證書需要支持多個域名和 IP,所以才需要這個步驟,制作單域名證書可以不用修改配置文件。
2.2 拷貝openssl.cnf到當前目錄
cp /etc/ssl/openssl.cnf ./
2.3 按以下修改拷貝過來的配置文件:
1> 在 [ req ] 塊下取消注釋行 req_extensions = v3_req
2> 確保[ req_distinguished_name ]下沒有 0.xxx 的標簽,有的話把0.xxx的0. 去掉
3> 在 [ v3_req ] 塊下增加一行 subjectAltName = @alt_names
4> 在文件末尾增加如下信息:
[ alt_names ]
DNS.1 = www.liqingjht.com
DNS.2 = liqingjht.com
IP.1 = 192.168.1.105
IP.2 = 192.168.1.107
4>tip> 注意有沒有www是不一樣的域名,我在做證書請求CSR文件的時候,有 IP 的需求,不過在交給廠商簽名的時候,廠商建議不加入 IP ,說是現在的標准逐漸不支持這種做法,因此我就沒加上 IP 了,如果廠商支持的話,這么做應該是可以的,因為自己簽名試了一下。
3.1 使用私鑰和配置文件生成證書請求CSR文件server.csr,沒有修改配置文件的不用寫配置文件的參數
openssl req -new -key server.key -out server.csr -config ./openssl.cnf
3.2 生成CSR文件需要填寫一些信息,Common Name填寫主要域名,這個域名要在DNS.XX里
Country Name (2 letter code) [AU]:CN State or Province Name (full name) [Some-State]:Fujian Locality Name (eg, city) []:Xiamen Organization Name (eg, company) [Internet Widgits Pty Ltd]:cnblogs Organizational Unit Name (eg, section) []:cnblogs Common Name (e.g. server FQDN or YOUR name) []:www.liqingjht.com Email Address []:liqingjht@163.com
3>tip> server.csr 這個文件就是要拿給CA廠商簽名的,server.key這個私鑰文件自己保存好。拿給廠商簽名后廠商會用他們的根證書前面這個CSR文件生成你服務器可用證書給你,在這之前我們可以自己充當CA廠商這個角色來測試一下。
4.1 要生成用來前面CSR文件的根證書,首先創建CA目錄
mkdir ./demoCA mkdir demoCA/newcerts touch demoCA/index.txt echo 01 > demoCA/serial
4.2 生成ca.key,並自簽名生成ca.crt證書,需要填寫密碼兩次,如1234,填寫的Common Name要和上面生成CSR文件一致。其他步驟一樣,建議還是按照CSR文件那樣填寫就好了。這里時間可以看到簽了兩年。
openssl req -new -x509 -days 3650 -keyout ca.key -out ca.crt -config ./openssl.cnf
5. 使用自簽署的CA證書簽署服務器CSR證書請求,輸入密碼,一直按y就好了:
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -extensions v3_req -config openssl.cnf
6. 這時候當前目錄有這幾個文件:ca.key ca.crt server.key server.crt server.csr,其中server.key server.crt就是要放在服務器上的,ca.key相當於電腦內置的根證書。將ca.crt下載到pc上,在瀏覽器管理證書那里切到根證書那欄,將ca.crt導入進來,這時候你用 https訪問openssl.cnf里填寫的DNS.XX 或 IP.XX 就不會跳出不安全提示了。將CSR文件交給廠商簽名就是因為廠商的CA證書有內置在瀏覽器里,所以即使沒有手動導入,也不會出現不安全提示。