使用mkcert工具生成受信任的SSL证书,解决局域网本地https访问问题(下)

简介: 使用mkcert工具生成受信任的SSL证书,解决局域网本地https访问问题(下)

4、mkcert测试验证

默认生成的证书格式为PEM(Privacy Enhanced Mail)格式,任何支持PEM格式证书的程序都可以使用。比如常见的Apache或Nginx等,这里我们用 python 自带的SimpleHttpServer演示一下这个证书的效果(代码参考来自:https://gist.github.com/dergachev/7028596)


前提条件:运行此pyhton脚本需要在本地环境中提前安装好python环境

下载链接:https://www.python.org/downloads/windows/

python环境安装参考链接:https://blog.csdn.net/u012106306/article/details/100040680

ff8fbf56d514272e6597fddd1ca1a3c4.png

1d4fb79d45af34cd63433c1d74be86fd.png

python2 版本

#!/usr/bin/env python2
import BaseHTTPServer, SimpleHTTPServer
import ssl
httpd = BaseHTTPServer.HTTPServer(('0.0.0.0', 443), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, certfile='./localhost+2.pem', keyfile='./localhost+2-key.pem', server_side=True, ssl_version=ssl.PROTOCOL_TLSv1_2)
httpd.serve_forever()

python3 版本

#!/usr/bin/env python3
import http.server
import ssl
httpd = http.server.HTTPServer(('0.0.0.0', 443), http.server.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, certfile='./localhost+2.pem', keyfile='./localhost+2-key.pem', server_side=True, ssl_version=ssl.PROTOCOL_TLSv1_2)
httpd.serve_forever()

双击运行simple-https-server.py脚本。

打开浏览器,输入https://192.168.2.5:8000,显示连接是安全的。

9cdae7e478764388bd3138b83eac0478.png

90753cb9b82ac1dda7fa7308e4663d6f.png

验证发现使用https://192.168.31.170本机访问也是可信的。然后需要将 CA 证书发放给局域网内其他的用户。

可以看到 CA 路径下有两个文件rootCA-key.pem和rootCA.pem两个文件,用户需要信任rootCA.pem这个文件。将rootCA.pem拷贝一个副本,并命名为rootCA.crt(因为 windows 并不识别pem扩展名,并且 Ubuntu 也不会将pem扩展名作为 CA 证书文件对待),将rootCA.crt文件分发给其他用户,手工导入。

C:\>mkcert-v1.4.3-windows-amd64.exe -CAROOT
C:\Users\Administrator\AppData\Local\mkcert

144d96426dd186d5e737a4c4c0844921.png

  • Windows系统操作访问演示

ae2d5fe34ab15143ec17ba1d06fc3edf.png

点击“安装证书”

e7703b927404e18b4c70eda35716f5bc.png

单击下一步。

73c698932224082a7a89eed769a79567.png

windows 导入证书的方法是双击这个文件,在证书导入向导中将证书导入`受信任的根证书颁发机构。

a921c5bf1e84f836cfe62f1d9ca99004.png

点击“完成”。

b699ffbeeada2cb8009d5dea9be74837.png

点击“是”。

e73e1666bcbd80b0378cbfa31695d054.png

4aa98ae4f388757b7ae173ba7b0819c8.png

再次点击此证书。已被添加为信任。

7d4a86f160c4c0f19093d14f817ebd5b.png

使用浏览器验证。输入https://192.168.2.25:8000,发现可信任。

0fafc2fe7429211cb5dca81489893a8c.png


  • Linux系统操作访问演示
[root@server ~]# ifconfig
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.115  netmask 255.255.255.0  broadcast 192.168.2.255
        inet6 fe80::5ccf:c1e4:1339:b7b6  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:5b:bd:72  txqueuelen 1000  (Ethernet)
        RX packets 22455  bytes 19633664 (18.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6252  bytes 693732 (677.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 87  bytes 9353 (9.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 87  bytes 9353 (9.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@server ~]# ls -l
total 8
-rw-------. 1 root root 1532 Jul  9 05:13 anaconda-ks.cfg
-rw-r--r--  1 root root 1793 Aug 12 23:22 rootCA.pem
[root@server ~]# cp -a rootCA.pem /etc/pki/ca-trust/source/anchors/ #将ca证书放在此路径下
[root@server ~]# /bin/update-ca-trust #执行此命令更新
[root@server ~]#
[root@server ~]# curl -I https://192.168.2.25:8000
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.9.6
Date: Fri, 13 Aug 2021 06:51:54 GMT
Content-type: text/html; charset=utf-8
Content-Length: 1536
[root@server ~]#


[root@server ~]# curl -Iv https://192.168.2.25:8000 #加上-v参数输出还会告诉证书是可信的。
* About to connect() to 192.168.2.25 port 8000 (#0)
*   Trying 192.168.2.25...
* Connected to 192.168.2.25 (192.168.2.25) port 8000 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* SSL connection using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
* Server certificate:
*       subject: OU=PC-20201120MNLV\\Administrator@PC-20201120MNLV,O=mkcert development certificate
*       start date: Aug 13 03:41:36 2021 GMT
*       expire date: Nov 13 03:41:36 2023 GMT
*       common name: (nil)
*       issuer: CN=mkcert PC-20201120MNLV\\Administrator@PC-20201120MNLV,OU=PC-20201120MNLV\\Administrator@PC-20201120MNLV,O=mkcert development CA
> HEAD / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.2.25:8000
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
HTTP/1.0 200 OK
< Server: SimpleHTTP/0.6 Python/3.9.6
Server: SimpleHTTP/0.6 Python/3.9.6
< Date: Fri, 13 Aug 2021 07:05:13 GMT
Date: Fri, 13 Aug 2021 07:05:13 GMT
< Content-type: text/html; charset=utf-8
Content-type: text/html; charset=utf-8
< Content-Length: 1536
Content-Length: 1536
<
* Closing connection 0


5、mkcert高级设置

可以使用打开 mkcert-v1.4.3-windows-amd64.exe –help 查看帮助,会发现很多高级用法。
比如 -cert-file FILE, -key-file FILE, -p12-file FILE 可以定义输出的证书文件名。
-client 可以产生客户端认证证书,用于SSL双向认证。之前的文章介绍过使用openssl脚本的(Nginx SSL快速双向认证配置 3),可以对比下。
-pkcs12 命令可以产生 PKCS12 格式的证书。java程序通常不支持 PEM 格式的证书,但是支持 PKCS12 格式的证书。通过这个程序我们可以很方便的产生 PKCS12 格式的证书直接给Java程序使用。
mkcert 127.0.0.1 localhost //后面还可以继续空格添加其他域名或IP地址,默认是pem格式
mkcert -pkcs12 192.168.10.123 //生成p12格式的正式iis可以用,默认密码为:“changeit”
mkcert -client 192.168.10.123 //客户端证书,默认是pem格式
mkcert -pkcs12 -client 192.168.10.123 //生成p12格式客户端证书,win用户可以直接导入,默认密码为:“changeit”
C:\>mkcert-v1.4.3-windows-amd64.exe -help
Usage of mkcert:
        $ mkcert -install
        Install the local CA in the system trust store.
        $ mkcert example.org
        Generate "example.org.pem" and "example.org-key.pem".
        $ mkcert example.com myapp.dev localhost 127.0.0.1 ::1
        Generate "example.com+4.pem" and "example.com+4-key.pem".
        $ mkcert "*.example.it"
        Generate "_wildcard.example.it.pem" and "_wildcard.example.it-key.pem".
        $ mkcert -uninstall
        Uninstall the local CA (but do not delete it).
Advanced options:
        -cert-file FILE, -key-file FILE, -p12-file FILE
            Customize the output paths.
        -client
            Generate a certificate for client authentication.
        -ecdsa
            Generate a certificate with an ECDSA key.
        -pkcs12
            Generate a ".p12" PKCS #12 file, also know as a ".pfx" file,
            containing certificate and key for legacy applications.
        -csr CSR
            Generate a certificate based on the supplied CSR. Conflicts with
            all other flags and arguments except -install and -cert-file.
        -CAROOT
            Print the CA certificate and key storage location.
        $CAROOT (environment variable)
            Set the CA certificate and key storage location. (This allows
            maintaining multiple local CAs in parallel.)
        $TRUST_STORES (environment variable)
            A comma-separated list of trust stores to install the local
            root CA into. Options are: "system", "java" and "nss" (includes
            Firefox). Autodetected by default.
C:\>


相关文章
|
7天前
|
安全 应用服务中间件 网络安全
49.3k star,本地 SSL 证书生成神器,轻松解决 HTTPS 配置痛点
mkcert是一款由Filippo Valsorda开发的免费开源工具,专为生成受信任的本地SSL/TLS证书而设计。它通过简单的命令自动生成并安装本地信任的证书,使本地环境中的HTTPS配置变得轻松无比。mkcert支持多个操作系统,已获得49.2K的GitHub Star,成为开发者首选的本地SSL工具。
|
9天前
|
Web App开发 算法 应用服务中间件
nginx开启局域网https访问
【10月更文挑战第22天】为了调试WebRTC功能,需要在局域网内搭建HTTPS协议。具体步骤包括:在已部署Nginx和安装OpenSSL的环境中生成私钥、证书签名请求和自签名证书;将生成的文件放置到Nginx的证书目录并修改Nginx配置文件,最后重启Nginx服务。注意,自签名证书不受第三方机构认可,如需正式使用,需向CA申请签名。
|
13天前
|
安全 网络安全 数据安全/隐私保护
政务内网实现https访问教程
政务内网实现HTTPS访问需经过多个步骤:了解HTTPS原理,选择并申请适合的SSL证书,配置SSL证书至服务器,设置端口映射与访问控制,测试验证HTTPS访问功能,注意证书安全性和兼容性,定期备份与恢复。这些措施确保了数据传输的安全性,提升了政务服务的效率与安全性。
|
8天前
|
安全 网络安全 数据安全/隐私保护
内网IP地址实现HTTPS加密访问教程
在内网环境中,为确保数据传输的安全性,绑定SSL证书搭建HTTPS服务器至关重要。本文介绍了内网IP地址的前期准备、申请SSL证书的步骤以及客户端配置方法。具体包括选择合适的CA、注册账号、提交申请、下载证书,并在客户端导入根证书,确保通信数据的安全加密。推荐使用JoySSL提供的技术解决方案,确保内网设备通信安全。
内网IP地址实现HTTPS加密访问教程
|
10天前
|
存储 网络安全
Curl error (60): SSL peer certificate or SSH remote key was not OK for https://update.cs2c.com.cn/NS/V10/V10SP2/os/adv/lic/base/x86_64/repodata/repomd.xml [SSL: no alternative certificate subject name matches target host name 'update.cs2c.com.cn']
【10月更文挑战第30天】在尝试从麒麟软件仓库(ks10-adv-os)下载元数据时,遇到 SSL 证书验证问题。错误提示为:`Curl error (60): SSL peer certificate or SSH remote key was not OK`。可能原因包括证书不被信任、证书与域名不匹配或网络问题。解决方法包括检查网络连接、导入 SSL 证书、禁用 SSL 证书验证(不推荐)、联系仓库管理员、检查系统时间和尝试其他镜像。
31 1
|
1月前
|
编解码 JSON 安全
使用search-guard加固安全为https访问
使用search-guard加固安全为https访问
|
应用服务中间件 Linux 网络安全
Linux日记本_07:Nginx安装SSL证书并配置http转https
https 上次写过一篇Linux下Nginx的搭建文章,这篇是补充SSL证书的安装与http请求转换成https请求. SSL证书是什么? ssl证书 当你点击证书的时候已经给了很明确的说明 1.保证远程计算机的身份 2.向远程计算机证明你的身份 证书信息 如果你很熟悉Nginx的话,那么在Nginx下安装SSL证书将会是一件很简单的事情.当然证书的安装方式有很多种,需要根据系统和所使用的软件不同来下载相关的资源,这里我们就不在赘述,我们只关注Nginx下相关的就OK了。
2000 0
|
2月前
|
监控 安全 搜索推荐
设置 HTTPS 协议以确保数据传输的安全性
设置 HTTPS 协议以确保数据传输的安全性
|
1月前
|
安全 网络协议 算法
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
147 4
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
|
1月前
|
存储 网络安全 对象存储
缺乏中间证书导致通过HTTPS协议访问OSS异常
【10月更文挑战第4天】缺乏中间证书导致通过HTTPS协议访问OSS异常
80 4