使用mkcert工具自签https证书
先说一下主要流程, 首先要根据域名生成两个秘钥文件,包含一个公钥一个私钥,部署项目的服务器上需要配置这两个证书文件。然后客户端电脑上还需要安装一个自制CA,也就是用来校验证书的颁发机构(因为这套证书使我们自己颁发给自己的,需要自己来校验自己,嗯,就是自导自演-_-)。以上文件均通过mkcert这个工具生成,有了这些就ok了。
一、安装 mkcert
由于我本地是使用windows安装的, 没有测试linux,但是我认为linux安装应该会更简单,这里就不放linux的安装方法了。mkcert提供macos、linux、windows的安装方法。
windows安装可以用两种方法,从mkcert官方提供的安装文件(地址)安装,另一种可以用windows上的一个包管理工具(choco)安装,类似linux那样。
另、安装choco:使用管理员身份打开cmd,执行
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
然后执行
choco install mkcert -y
如果没有问题应该就已经安装成功了。参考 windows安装 choco。
二、使用mkcert安装颁发机构以及证书文件
首先需要先将mkcert的认证机构安装到电脑中, 执行:
mkcert -install
下一步就是生成证书文件:
mkcert localhost.com 127.0.0.1
mkcert + 需要认证的域名(需要包含所有使用https需要认证的域名,包括后端服务),会生成两个pem文件。带-key的就是私钥。(我出现过使用git的cmd命令行工具执行这个命令没有反应的现象,如果出现这种情况使用windows自带的cmd就没问题了)
文件生成在当前目录,根据自己的当前目录找到这两个文件就可以了。
三、找到CA机构文件,为需要访问项目的电脑安装自制校验机构
直接执行
mkcert -CAROOT
显示出来的就是本地校验文件存放的位置,直接粘贴到文件管理器中就能找到
其中有两个文件,这里只需要红框中的那个公钥证书就可以了。把它复制出来, 将后缀名改成crt,于是我们得到了一个可以安装到其他电脑的CA证书校验文件。
把它拷贝到其他电脑上,直接双击就可以安装,其中有一步操作需要安装到指定位置
剩下的一步到底就可以了。弹窗均选是,就可以看到提示导入成功~
以上为windows的安装过程,mac操作不一样,需要添加证书为信任,具体操作参考 mac安装根证书。linux我就没有研究了,自行百度吧~
四、后端服务生成安装p12证书文件
目前我们拥有三个文件,分别是两个pem公钥私钥,一个rootCA.crt机构文件。
我们这里是java后端服务,他们需要使用p12的证书文件,将公钥私钥合二为一,这里我使用openssl命令生成(git bash自带):
openssl pkcs12 -export -clcerts -in localhost.com+1.pem -inkey localhost.com+1-key.pem -out server.p12
需要在这两个文件的目录里执行。
五、部署使用
现在我们拥有四个文件:两个pem公钥私钥文件,一个rootCA机构文件,一个server.p12证书文件。rootCA是给需要访问项目的电脑安装的,p12是给后端服务使用的,正常部署前端服务只需要两个pem文件即可。
前端本地开发测试启动服务,本人使用vue开发,用的是vue cli 的脚手架4.3.1的版本,cli使用node启动本地服务,只需要在 vue.config.js做如下配置:
devServer: { https: true, key: fs.readFileSync('./localhost+6-key.pem'), cert: fs.readFileSync('./localhost+6.pem'), },
需要重启项目生效!
线上服务配置前端一般使用nginx部署,nginx配置如下:
server { listen 443 ssl; server_name localhost; ssl_certificate localhost+6.pem; ssl_certificate_key localhost+6-key.pem; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root /home/nginx/ssap/html; index index.html index.htm; try_files $uri $uri/ /index.html; } }
六、总结一下
使用自签https证书唯一一点不好处就是,一般都在内网使用,因为访问项目的人需要安装校验机构文件。如果项目上线在外网使用,还是需要去购买证书的。不可能让每一个访问项目的每一个人都下载安装你自己的校验机构文件,对吧~
有问题欢迎评论。
另外,火狐不认这一套自导自演的自签证书。