使用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:\>


相关文章
|
14天前
|
网络安全 开发工具 git
解决 Git 访问 GitHub 时的 SSL 错误
通过上述步骤,可以有效解决 Git 访问 GitHub 时的 SSL 错误。推荐优先更新 CA 证书和正确配置 Git 使用 CA 证书,避免禁用 SSL 验证。如果问题持续,可以切换到 SSH 方式访问 GitHub,确保连接的安全性和稳定性。希望这些内容对您的学习和工作有所帮助。
65 3
|
1月前
|
网络协议 算法 数据建模
IP 地址,包括 IPv6 怎么申请 SSL证书来实现 https
很多企业单位已经开始在使用 IPv6 资源,跟 IPv4 一样,IPv6也是需要SSL证书的。在目前的SSL证书品牌,KeepTrust 是可以支持 IPv6 地址的。跟普通IP地址一样,给IPv6签发SSL证书也是需要验证申请者对 IP 地址的管理权限的。如果是 OV 版,还需要验证组织信息的真实性。
|
3月前
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
253 60
|
3月前
|
安全 应用服务中间件 网络安全
配置Nginx反向代理实现SSL加密访问的步骤是什么?
我们可以成功地配置 Nginx 反向代理实现 SSL 加密访问,为用户提供更安全、可靠的网络服务。同时,在实际应用中,还需要根据具体情况进行进一步的优化和调整,以满足不同的需求。SSL 加密是网络安全的重要保障,合理配置和维护是确保系统安全稳定运行的关键。
329 60
|
2月前
|
应用服务中间件 Linux 网络安全
nginx安装部署ssl证书,同时支持http与https方式访问
为了使HTTP服务支持HTTPS访问,需生成并安装SSL证书,并确保Nginx支持SSL模块。首先,在`/usr/local/nginx`目录下生成RSA密钥、证书申请文件及自签名证书。接着,确认Nginx已安装SSL模块,若未安装则重新编译Nginx加入该模块。最后,编辑`nginx.conf`配置文件,启用并配置HTTPS服务器部分,指定证书路径和监听端口(如20000),保存后重启Nginx完成部署。
866 8
|
3月前
|
安全 网络协议 应用服务中间件
内网ip申请SSL证书实现https访问
内网IP地址虽不能直接申请公网SSL证书,但可通过IP SSL证书保障数据安全。流程包括:确定固定内网IP,选择支持内网IP的CA,注册申请证书,生成CSR,验证IP所有权,下载部署证书至Web服务器,测试HTTPS访问,确保配置正确及证书有效。此方法适用于内网环境,提升数据传输安全性。
内网ip申请SSL证书实现https访问
|
3月前
|
安全 数据建模 应用服务中间件
如何给IP地址添加SSL证书(https)
为IP地址配置SSL证书实现HTTPS访问,需拥有固定公网IP,选择支持IP证书的CA,完成账户注册、证书申请、所有权验证及证书安装。验证过程涉及在服务器上放置特定文件,确保可访问。安装后需测试连接,注意兼容性和安全性,定期维护证书。
|
3月前
|
安全 网络协议 网络安全
怎么给ip地址配置https访问
为了配置公网IP地址的HTTPS访问,首先需明确需求并选择受信任的证书颁发机构(如JoySSL)。接着,在JoySSL官网注册并登录,填写特定注册码230922以获取免费IP证书的测试权限。提交证书申请时,填写IP地址及相关验证信息,并完成IP地址验证。验证通过后,下载证书文件。最后,使用浏览器访问IP地址,检查安全连接标志,确保无证书错误。通过以上步骤,可成功配置IP地址的HTTPS访问,提升数据传输安全性和可信度。
|
2天前
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
1月前
|
数据建模 网络安全
阿里云SSL证书不同类型DV、OV和EV如何收费?单域名和通配符SSL价格整理
阿里云SSL证书提供免费和收费版本,涵盖DV、OV、EV多种类型。收费证书品牌包括DigiCert、GlobalSign等,价格从238元/年起。免费SSL证书由Digicert提供,单域名有效3个月,每个实名主体每年可领取20个。具体价格和详情见阿里云SSL官方页面。