背景
部署一套新的开发环境,未提供准确的域名和证书,开发环境的域名是开发之间各自约定的,无需购买真实的域名。
遇到的问题
在部署完毕后,发现服务之间的调用需要使用到https证书,而申请证书需要小钱钱的,并且域名也不是真实域名,无法直接在云上购买证书。
mkcert
- 思考
现在需要的只是一个https证书,没办法在局域网内实现吗?
- 方案选择
在查阅资料后,发现mkcert和openssl可以实现我的诉求,对比了一下mkcert和openssl,发现openssl的操作太复杂了ヾ( ̄▽ ̄)Bye
Bye。还是mkcert操作方便,哈哈,怎么简单怎么来。
安装
使用
生成证书
- 生成CA证书
mkcert -install
生成后在/root/.local/share/mkcert目录下产生两个文件(rootCA-key.pem,rootCA.pem), rootCA.pem就是后续需要给到对应客户端信任的证书
- 生成指定域名证书
# 指定域名生成证书
mkcert -key-file key.pem -cert-file cert.pem xxx.xxx.com *.xxx.xxx.com
# 如果需要跨IP访问,需要生成一个pkcs12证书
mkcert -pkcs12 10.20.180.86
使用证书
将对应域名的key.pem和cert.pem放到指定网关的指定即可,这个看个人情况自己查资料处理哈。
信任证书
- Windows信任证书
- 将cert.pem修改为cert.crt拷贝到Windows系统中,同时将10.20.180.86.p12证书也拷贝下来,双击安装证书即可。
- 记得放到受信任的证书目录下
测试
- 本地访问:
- PHP服务端访问
- 在curl.haxx.se/ca/cacert.p…下载cacert.pem文件
- 将rootCA.pem的内容填充到cacert.pem最后
- 修改php.ini
curl.cainfo = "/webser/www/ssl/cacert.pem"
openssl.cafile = "/webser/www/ssl/cacert.pem"