證書生成
首先需要有https的證書檔案,如果你已經向證書授權中心購買了證書,可以跳過這步,這裡介紹如何生成自簽名證書,自簽名證書是指不是證書授權中心(Certificate Authority)頒發的證書,而是在個人計算機上通過相關工具自己生成的證書,一般用於測試,不可用於生產環境。
為了方便管理證書(證書生成過程中會產生很多檔案),我們可以單獨建立一個目錄用於存放證書檔案,下面是通過openssl工具生成證書的過程。
1. 建立目錄
$ cd ~
$ mkdir ssl
$ cd ssl
2. 建立祕鑰檔案
建立祕鑰檔案definesys.key,名稱可以自定義,需要指定密碼(隨意密碼即可)
$ openssl genrsa -des3 -out definesys.key 1024
Generating RSA private key, 1024 bit long modulus
.......++++++
..................++++++
e is 65537 (0x10001)
Enter pass phrase for definesys.key:
Verifying - Enter pass phrase for definesys.key:
3. 建立csr證書
需要輸入相關資訊,比較重要的是Common Name
,這個是訪問nginx的地址
$ openssl req -new -key definesys.key -out definesys.csr
Enter pass phrase for definesys.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter `.`, the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Shanghai
Locality Name (eg, city) []:Shanghai
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Definesys
Organizational Unit Name (eg, section) []:Definesys
Common Name (e.g. server FQDN or YOUR name) []:www.definesys.com
Email Address []:jianfeng.zheng@definesys.com
Please enter the following `extra` attributes
to be sent with your certificate request
A challenge password []:可以不用輸
An optional company name []:可以不用輸
#此時檔案
$ ssl ll
total 16
-rw-r--r-- 1 asan staff 733 1 3 23:57 definesys.csr
-rw-r--r-- 1 asan staff 963 1 3 23:55 definesys.key
4. 去除祕鑰密碼
nginx使用私鑰時需要去除密碼,執行以下命令時需要輸入祕鑰的密碼
$ cp definesys.key definesys.key.bak
$ openssl rsa -in definesys.key.bak -out definesys.key
Enter pass phrase for definesys.key.bak:
writing RSA key
5. 生成crt證書
$ openssl x509 -req -days 3650 -in definesys.csr -signkey definesys.key -out definesys.crt
Signature ok
subject=/C=CN/ST=Shanghai/L=Shanghai/O=Definesys/OU=Definesys/CN=www.definesys.com/emailAddress=jianfeng.zheng@definesys.com
Getting Private key
#此時檔案列表
$ ssl ll
total 32
-rw-r--r-- 1 asan staff 1017 1 4 00:03 definesys.crt
-rw-r--r-- 1 asan staff 733 1 3 23:57 definesys.csr
-rw-r--r-- 1 asan staff 887 1 4 00:02 definesys.key
-rw-r--r-- 1 asan staff 963 1 4 00:01 definesys.key.bak
nginx容器配置
1. 證書檔案上傳
將definesys.crt
檔案和definesys.key
檔案拷貝到伺服器上,假設你伺服器上nginx的配置檔案在/etc/nginx/
目錄下,可以在該目錄下建立一個資料夾,這裡命名certs
,將檔案拷貝至該資料夾下。
2. 配置檔案修改
修改配置檔案nginx.conf
server {
listen 443 ssl;
server_name www.definesys.com;
ssl_certificate /etc/nginx/certs/definesys.crt;
ssl_certificate_key /etc/nginx/certs/definesys.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
如果server
配置不在nginx.conf
檔案上,可以在conf.d
資料夾下找.conf
字尾的檔案,一般有個default.conf
檔案。
3. 啟動容器
docker run -d --restart=unless-stopped -p 443:443 -v /etc/nginx/:/etc/nginx -v /var/run/docker.sock:/tmp/docker.sock:ro -v /u01/application:/usr/share/nginx/html nginx
訪問https://localhost驗證配置是否正確,如果能夠正常訪問說明配置成功,由於是自簽名證書,開啟時會提示證書不安全,忽略即可。