前言
之前寫自己的網站時, 申請過免費的https
證書. 最近想在自己本地搭一個, 結果忘了當初證書是怎么來的了. 本來想着去申請個免費的證書, 但想了想, 我只需要在自己本地能使用就行了, 我自己的環境, 那當然是我說了算了. 只要能夠將證書構造出來, 安裝到本地就可以識別了. 搜了搜, 發現還真的有生成證書的工具. 道理咱都懂, 動手才是王道, 走你.
證書生成
以下以我自己的域名hujingnb.cn
為例.
隨便找個路徑, 創建 hujingnb.conf
配置文件, 內容如下(內容加了注釋, 請自行將注釋刪掉):
[ req ]
default_bits = 2048
default_keyfile = server-key.pem
// 標識提示的標簽名, 就是下面的 [subject]
distinguished_name = subject
// 指定擴展的標簽名
req_extensions = req_ext
x509_extensions = x509_ext
// 指定編碼
string_mask = utf8only
[ subject ]
// 以下為填寫的相關信息
countryName = 國家(跳過即可)
countryName_default = CH
stateOrProvinceName = 省份(跳過即可)
stateOrProvinceName_default = BeiJing
localityName = 城市(跳過即可)
localityName_default = BeiJing
organizationName = 組織(跳過即可)
organizationName_default = None
commonName = 域名(必填)
commonName_default = hujingnb.cn
emailAddress = 郵箱(跳過即可)
emailAddress_default = hujingnb@qq.com
[ x509_ext ]
// 使用者密鑰標識
subjectKeyIdentifier = hash
// 授權密鑰標識
authorityKeyIdentifier = keyid,issuer
// 表示要生成的證書是用於終端證書的, TRUE 為 CA 證書, 可下發二級證書
basicConstraints = CA:FALSE
// 指明證書用途
keyUsage = digitalSignature, keyEncipherment
// 標明當前證書使用與哪些域名, 在下面的 alternate_names 標簽中
subjectAltName = @alternate_names
// 證書提交說明
nsComment = "generate crt"
[ req_ext ]
subjectKeyIdentifier = hash
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
subjectAltName = @alternate_names
nsComment = "generate crt"
[ alternate_names ]
// 證書可使用的域名列表
DNS.1 = hujingnb.cn
DNS.2 = *.hujingnb.cn
// 還有寫其他的參數, 可查看 openssl.cnf 配置文件
然后執行命令:
openssl req -config hujingnb.conf -new -sha256 -newkey rsa:2048 -nodes -keyout hujingnb.key -x509 -days 365 -out hujingnb.crt
提示需要輸入一堆參數, 都可以不給. 但是, Common Name 需要指定域名
對以上用到的參數簡單解釋:
- config: 指明配置文件
- new: 指明生成新的證書
- newkey: 生成新的密鑰, 方式為 rsa. 長度為2048
- nodes: 指定密鑰不用加密(沒懂是什么意思, 但是不指定不能生成證書).
- keyout: 私鑰輸出文件
- days: 標明證書有效期
- X509: 表示輸出證書的格式, 這個我們在配置文件中配過了. (默認是 crt 格式, 我試了, 不加這個參數也 OK)
- out: 證書輸出文件
生成證書文件以及私鑰.
然后將證書以及私鑰 copy 到你想要的任意位置,
證書安裝
雙擊crt
證書文件.
雙擊證書, 將證書設置為始終信任. 然后 X 調, 輸入密碼, 確認修改. 證書安裝完成.
修改 nginx 配置
OK, 證書的准備工作已經完成了, 現在剩下 nginx 的配置了. 將以下配置加到 nginx 配置文件中:
listen 443 ssl;
server_name hujingnb.cn;
ssl on;
ssl_certificate /Users/hujing/dir/pem/hujingnb.crt;
ssl_certificate_key /Users/hujing/dir/pem/hujingnb.key;
請自行修改其中證書以及私鑰的文件位置.
萬事具備, 試驗:
OK, 完美.
總結
不過這樣安裝, 只能在本地環境訪問, 僅供測試使用.
對於在本地環境搭建HTTPS
的開發來說, 不用費時費力的申請線上證書, 可模擬線上HTTPS
請求. 足矣.