zoukankan      html  css  js  c++  java
  • https本地自签名证书添加到信任证书访问

    1、背景

    本文适用于基于https(http+ssl)的网站通信、本地调试等,上线是请寻找免费 ssl证书申请。

    本地调试过程中,一些特殊的场景需要我使用http+ssl通信,比如在Chrome中使用客户端麦克风。

    笔者起初使用以下一些命令,在linux、windows进行自签名,但是没能得到Chrome的信任,本地Chrome版本76.0

    1. 使用openssl生成密钥privkey.pem:
    openssl genrsa -out D:develop
    ginx-1.14.2confprivkey2.key 1024/2038
    证书信息可以随便填或者留空,只有Common Name要根据你的域名填写。
    2. 使用密钥生成证书server.pem:
    openssl req -new -x509 -key D:develop
    ginx-1.14.2confprivkey2.key -out D:develop
    ginx-1.14.2confserver2.pem -days 365

    典型的症状就是报错:

    1、ERR_CERT_AUTHORITY_INVALID

    2、Subject Alternative Name missing

    如下图:

    后来在网上一篇文章《怎么让 chrome 信任自签名的 localhost 证书啊》找到了一些原因:

    高版本的Chrome需要验证SAN

    1. 首先要看你的 chrome 报的自签名证书是什么问题(不同错误提示,有不同的解决方法)
    2. 要看你的 chrome 的版本号,从 58 版本开始,自签证书就只认 SAN 不认 CommonName 了
    3. 自签证书里面设置的 SAN 是 ip 还是域名,目前 chrome 会认域名的,本地测试,建议改 host 来测

    使用了mkcert生成证书,响应的工具需要到github下载,https://github.com/FiloSottile/mkcert/releases

    下载 mkcert-vx.y.z-windows-amd64.exe

    起初使用的命令如下

    mkcert-v1.4.1-windows-amd64.exe www.aaa.com

    同时也配置了本地dns(c:windowssystem32driversetchosts)文件

    172.16.3.50    www.aaa.com

    然后执行

    mkcert-v1.4.1-windows-amd64.exe -install

    结果无效,Chrome还是报错。

    正确方法如下:

    1、生成证书

    mkcert-v1.4.1-windows-amd64.exe www.aaa.com aiPlatform.dev localhost 127.0.0.1 ::1 172.16.3.50

    2、安装证书

    mkcert-v1.4.1-windows-amd64.exe -install

    3、把mkcert-v1.4.1-windows-amd64.exe目录中生成的证书www.aaa.com+5.pem和www.aaa.com+5-key.pem拷贝到nginx的目录中,修改证书

     

    修改证书

    4、重启nginx

    nginx -s stop
    nginx

     经过以上配置,证书可以被信任了,也可以正常访问wss://服务

     以上地址,可以使用上面命令中使用到的几个地址,包括虚拟域名解析

    https://www.aaa.com:8443/asr_online_ws.html

     

    cer证书转jks

    java下面笔者在本地调试的时候,由于使用的是自签名证书,需要在调试过程中加载自签名的信任证书。

    java下面只人jks,所需需要进行证书转换,命令如下

    keytool -import -alias mycert -file www.xxx.com+5.pem -keystore D:certwww.xxx.com+5.jks

    弹出的提示框输入两次changeit,然后输入"是”,java代码中在通信前设置证书

    public static void main(String[] args) {
    
    
        System.setProperty("javax.net.ssl.trustStore","cert\www.xxx.com+5.jks");
        System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
    
        int length = args.length;
        if(length==0)
        {
            System.out.println("请填写wav识别文件路径");
            return;
        }
        String WS_URL="wss://ai.xxx.cn:6002/wsapi/asrv2";
    }

    版权归https://global.v2ex.com/t/365406及原作者所有

    相关网址:

    https://www.v2ex.com/t/524671

    https://blog.filippo.io/mkcert-valid-https-certificates-for-localhost/

    https://github.com/FiloSottile/mkcert

  • 相关阅读:
    JavaWeb_Tomcat_Maven!
    java异常!
    JavaWeb获取web.xml初始参数!getInitParameter
    JavaWeb文件下载!
    Java抽象接口!
    JavaWeb初识Servlet!
    关于HashMap以对象作为Key的实现及踩坑
    浅析.Net下的多线程编程(2)
    获取浏览器分辨率
    浅析.Net下的多线程编程(1)
  • 原文地址:https://www.cnblogs.com/passedbylove/p/12054364.html
Copyright © 2011-2022 走看看