openssl創建的自簽名證書,使用自簽發證書--指定使用多域名、泛域名及直接使用IP地址
在開發環境及私有環境下需要使用SSL,於是創建自簽發證書,而必須支持多域名、泛域名、直接IP訪問
1. Nginx的ssl模塊安裝
詳情步驟參考:https://www.cnblogs.com/haolb123/p/15030631.html
2. nginx加入systemd管理
在目錄/lib/systemd/system中增加文件:nginx.service內容如下:
[Unit] Description=nginx After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target
systemctl enable nginx.service 設置開機啟動。
3. 使用openssl生成證書自簽名
openssl在centos中是標配,所以直接在centos中操作,因為要多個域名和IP,故而需要編輯一個配置文件,如下:
[root@centos7 ~]# vim req.cnf
# 定義輸入用戶信息選項的"特征名稱"字段名,該擴展字段定義了多項用戶信息。
distinguished_name = req_distinguished_name
# 生成自簽名證書時要使用的證書擴展項字段名,該擴展字段定義了要加入到證書中的一系列擴展項。
x509_extensions = v3_req
# 如果設為no,那么 req 指令將直接從配置文件中讀取證書字段的信息,而不提示用戶輸入。
prompt = no
[req_distinguished_name]
#國家代碼,一般都是CN(大寫)
C = CN
#省份
ST = Beijing
#城市
L = Beijing
#企業/單位名稱
O = oyz
#企業部門
OU = oyz
#證書的主域名
CN = 192.168.8.190
##### 要加入到證書請求中的一系列擴展項 #####
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = oyz.com
DNS.2 = *.oyz.com
DNS.3 = www.flymot.com
DNS.4 = *.oyz.com
IP.1 = 192.168.8.190
IP.2 = 192.168.1.190
[root@centos7 ~]# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /usr/local/nginx/ssl/private.key -out /usr/local/nginx/ssl/nginx.crt -config req.cnf -sha256
openssl 命令參數說明:
req 大致有3個功能:生成證書請求文件、驗證證書請求文件和創建根CA
-x509 說明生成自簽名證書
-nodes openssl req在自動創建私鑰時,將總是加密該私鑰文件,並提示輸入加密的密碼。可以使用"-nodes"選項禁止加密私鑰文件。
-days 指定所頒發的證書有效期。
-newkey 實際上,"-x509"選項和"-new"或"-newkey"配合使用時,可以不指定證書請求文件,它在自簽署過程中將在內存中自動創建證書請求文件
"-newkey"選項和"-new"選項類似,只不過"-newkey"選項可以直接指定私鑰的算法和長度,所以它主要用在openssl req自動創建私鑰時。
rsa:2048 rsa表示創建rsa私鑰,2048表示私鑰的長度。
-keyout 指定私鑰保存位置。
-out 新的證書請求文件位置。
-config 指定req的配置文件,指定后將忽略所有的其他配置文件。如果不指定則默認使用/etc/pki/tls/openssl.cnf中req段落的值
4. 配置nginx
[root@centos7 ~]# vim /usr/local/nginx/conf/nginx.conf server { listen 8081 ssl; server_name 192.168.8.190; ssl on; ssl_certificate /usr/local/nginx/ssl/nginx.crt; ssl_certificate_key /usr/local/nginx/ssl/private.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location / { root html; error_page 500 502 503 504 /50x.html; index index.html index.htm; } }
5. 啟動nginx
[root@centos7 nginx]# systemctl start nginx [root@centos7 nginx]# ss -ant | grep 8081 LISTEN 0 128 *:8081 *:*
6. 在Windows中導入證書
7. 測試效果
參考鏈接:
https://www.cnblogs.com/f-ck-need-u/p/7113610.html
https://www.cnblogs.com/lzpong/p/13030886.html