vue项目配置https--通过keytool生成ssl证书并在nginx配置https

179 阅读2分钟

背景:想要使用http2,现目前使用http2前提是需要用https。

步骤1:
如果安装了jdk,可进入jdk安装目录下的/jre/bin目录,该目录中打开cmd控制台,以便使用keytool和openssl。

步骤2:使用keytool生成jks文件
-alias参数跟的值可以从dsc_test改为其他值,但后面的命令如果使用alias参数也要用该对应值。dns后面跟域名可以从dev-test.com改为其他值,最后实际访问时使用该域名访问。

keytool -genkeypair -keyalg RSA -keysize 2048 -validity 365 -alias dsc_test -keystore dev.jks -ext san=dns:dev-test.com

步骤3.生成cer文件,用于后期浏览器安装
123456可以改为其他密码值

keytool -export -trustcacerts -alias dsc_test -file dev.cer -keystore dev.jks -storepass 123456

步骤4.生成pcks12格式文件,用于后面生成私钥文件dev.key

keytool -importkeystore -srckeystore dev.jks -destkeystore dev.jks -deststoretype pkcs12

步骤5.使用openssl把cer文件转化为pem证书文件

openssl x509 -inform der -in dev.cer -out dev.pem

步骤6.把pcks12转化为私钥文件dev.key

openssl pkcs12 -nocerts -nodes -in dev.jks -out dev.key

步骤7.复制dev.key和dev.pem到前端项目中
我是复制到src/assets/ssl文件夹中,并修改vue cli4的webpack配置,使得打包后该文件夹下文件在dist中下一级目录中。安装copy-webpack-plugin并在vue.config.js中修改:

const CopyWebpackPlugin = require('copy-webpack-plugin');
configureWebpack:{
  plugins:[
    new CopyWebpackPlugin([{from:'src/assets/ssl', to:'ssl'}])
  ]
}

步骤8.配置nginx

server{
  listen 443 ssl http2;
  server_name localhost;
  ssl_certificate /usr/share/nginx/html/ssl/dev.pem; // "/usr/share/nginx/html"为Dockerfile中配置的项目打包地址
  ssl_certificate_key /usr/share/nginx/html/ssl/dev.key;
}

步骤9.访问
部署流水线之后,查看ip和端口,比如为10.2.6.2:32004。到host文件夹中配置之前说过的dns参数(即域名)与该ip的映射,比如:

10.2.6.2 dev-test.com

然后安装之前说的.cer格式文件的证书到浏览器中(双击.cer或者chrome浏览器中导入证书,注意对于选项"将所有的证书都放入下列存储"要选择"受信任的根证书颁发机构"),然后访问带https前缀的域名https://10.2.6.2:32004 即可。 注意:如果直接访问https://10.2.6.2:32004 可以访问成功,但是导航栏左侧仍然提示不安全,因为之前设置了dns参数(即域名),点击导航栏左侧证书,在证书的详细信息tab页中的"使用者可选名称"即为之前设置的dns参数(即域名),应直接访问dev-test.com:32004 ,此时就不会提示不安全了。

之前尝试直接用openssl生成相关文件,但访问时仍然提示不安全,这里结合keytool就可以实现。

参考:# 随记——nginx配置https访问(KeyTool证书)