工作中经常需要绑定域名到本地进行开发,我就经常使用*.hp.dev作为自己的本地开发域名。现代浏览器都默认跳转到https地址,会对我们开发造成一些麻烦,这里我通过自己生成https证书,解决本地开发绑定的域名不支持https的问题。
本地生成CA
生成本地CA的密钥rootCA.key(要记住你设置的密码)
Shell
openssl genrsa -des3 -out rootCA.key 2048
1
opensslgenrsa-des3-outrootCA.key2048
用这个密钥进行签名,生成一张CA的证书rootCA.pem这里设置了有效期(1024天),里面可以填下密码,email地址其他的可以留空。
Shell
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
1
opensslreq-x509-new-nodes-keyrootCA.key-sha256-days1024-outrootCA.pem
生成网站数字证书
为了避免chrome的NET::ERR_CERT_COMMON_NAME_INVALID错误,需要在网站证书里填一些额外的信息。
首先创建文件server.csr.cnf
请把emailAddress、CN改为你的邮箱和域名。
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[dn]
C=US
ST=RandomState
L=RandomCity
O=RandomOrganization
OU=RandomOrganizationUnit
emailAddress=yearnfar@gmail.com
CN = hp.dev
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[req]
default_bits=2048
prompt=no
default_md=sha256
distinguished_name=dn
[dn]
C=US
ST=RandomState
L=RandomCity
O=RandomOrganization
OU=RandomOrganizationUnit
emailAddress=yearnfar@gmail.com
CN=hp.dev
然后创建文件v3.ext,请把DNS.1、DNS.2修改为你的域名
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = hp.dev
DNS.2 = *.hp.dev
DNS.3 = localhost
1
2
3
4
5
6
7
8
9
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage=digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment
subjectAltName=@alt_names
[alt_names]
DNS.1=hp.dev
DNS.2=*.hp.dev
DNS.3=localhost
用server.csr.cnf配置生成网站证书server.csr,同时生成网站私钥device.key(给nginx用的)
Shell
openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout hp.dev.key -config server.csr.cnf
1
opensslreq-new-sha256-nodes-outserver.csr-newkeyrsa:2048-keyouthp.dev.key-configserver.csr.cnf
用CA私钥rootCA.key以CA的名义(rootCA.pem)给网站证书签名,生成CA签名后的证书hp.dev.crt,同时加上v3.ext中的配置,
Shell
openssl x509 -req -in server.csr \
-CA rootCA.pem \
-CAkey rootCA.key \
-CAcreateserial -out hp.dev.crt -days 800 -sha256 -extfile v3.ext
1
2
3
4
opensslx509-req-inserver.csr\
-CArootCA.pem\
-CAkeyrootCA.key\
-CAcreateserial-outhp.dev.crt-days800-sha256-extfilev3.ext
到这里我们就准备好了下一步nginx要用到的两个文件:
hp.dev.key
hp.dev.crt
1
2
hp.dev.key
hp.dev.crt
配置nginx
server {
listen 80;
listen 443 ssl;
server_name lottie.hp.dev;
#charset koi8-r;
access_log logs/hp.dev.access.log main;
ssl_certificate /etc/nginx/ssl/hp.dev.crt;
ssl_certificate_key /etc/nginx/ssl/hp.dev.key;
root /data/www/html/hp.dev/lottie;
index index.html index.htm;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server{
listen80;
listen443ssl;
server_namelottie.hp.dev;
#charset koi8-r;
access_loglogs/hp.dev.access.logmain;
ssl_certificate/etc/nginx/ssl/hp.dev.crt;
ssl_certificate_key/etc/nginx/ssl/hp.dev.key;
root/data/www/html/hp.dev/lottie;
indexindex.htmlindex.htm;
error_page500502503504/50x.html;
location=/50x.html{
roothtml;
}
}
信任CA证书
如果是mac系统,双击第一步生成rootCA.pem证书把他安装到钥匙串中。
查看效果
Firefox使用自己独立的证书管理器(Certificates Manager),并没有像 IE 和 Chrome 那样直接使用系统中的证书存储。所以如果使用Firefox浏览器,我们还需要重新在 Firefox 中添加一回。下面介绍如何将自签发的 SSL 证书导入为 Firefox 中的受信任根证书。
阅 2,892