教你秒建受信任的本地 SSL 证书,彻底解决开发测试环境的无效证书警告烦恼!...

640?wx_fmt=png

您是否厌倦了在本地开发项目中使用不受信任的 SSL 证书?维护自己的证书颁发机构(CA)是一个痛苦的事情,这过程中需要用到神秘的程序和命令。在本指南中,我将向您展示一种在没有 CA 的情况下在本地开发计算机上使用受信任 SSL 证书的简单方法。

mkcert 是一个简单的零配置工具,由 Filippo Valsorda 使用 Go 编写,用于制作具有您喜欢的任何名称的本地可信开发证书,无需任何配置。这将对您有所帮助,因为无法从可信证书颁发机构获取没有有效 DNS 记录的本地名称的证书。让我们深入研究安装和使用 mkcert

项目地址:https://github.com/FiloSottile/mkcert

如果你想申请一个线上可以使用免费证书,也可以参考「手把手教你免费申请支持通配符的 SSL 证书」和「Let's Encrypt 免费通配符 SSL 证书申请教程」两篇教程。

在不同平台下安装 mkcert

  1. 如何在 Ubuntu / Debian 上安装 mkcert

要在任何 Ubuntu 或 Debian 系统上安装 mkcert,首先要安装 certutil 依赖项:

$ sudo apt-get updatesudo apt install wget libnss3-tools

安装完成后,下载 mkcert 来自 Github 的二进制包。检查 mkcert 发布页面以获取最新版本。在撰写本文时,最新版本是。v1.4.0

$ export VER="v1.4.0" && wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/${VER}/mkcert-${VER}-linux-amd64

下载文件后,使文件可执行并将二进制文件放在 /usr/local/bin 下面。

$ chmod +x  mkcert	
$ sudo mv mkcert /usr/local/bin
  1. 如何在 CentOS / Fedora 上安装 mkcert

在 CentOS 和 Fedora 上安装 mkcert 类似于 Ubuntu / Debian 安装,您只需要先安装 nss-tools工具。

安装 nss-tools

$ sudo yum install nss-tools

安装完成后,下载 mkcert 二进制包,就像安装 Ubuntu 一样。

$ export VER="v1.4.0" && wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/${VER}/mkcert-${VER}-linux-amd64

下载文件后,使文件可执行并将二进制文件放在 /usr/local/bin 下面。

$ chmod +x  mkcert	
$ sudo mv mkcert /usr/local/bin
  1. 如何在 Arch Linux 上安装 mkcert

对于 Arch Linux,您可以使用上述过程或使用 AUR 安装 mkcert。对于通过 AUR 安装你需要使用 AUR 助手,推荐 yayyay 是 Arch Linux / Manjaro 的最佳 AUR 助手。

安装 yay 后,使用以下命令安装 mkcert

$ yay -S --noconfirm --needed go	
$ yay -S --noconfirm --needed mkcert
  1. 如何在 macOS 上安装 mkcert

对于 macOS 用户,您可以下载二进制包或者从中 brew 安装 mkcert

$ brew install mkcert	
$ brew install nss # if you use Firefox

对于二进制安装:

$ export VER="v1.4.0" && wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/${VER}/mkcert-${VER}-linux-amd64

下载文件后,使文件可执行并将二进制文件放在 /usr/local/bin 下面。

$ chmod +x  mkcert	
$ sudo mv mkcert /usr/local/bin

如何使用 mkcert 生成本地受信任的 SSL 证书

  1. 生成本地受信任的 SSL 证书

mkcert 支持以下根存储:

  • macOS system store

  • Windows system store

  • update-ca-trust (Fedora、RHEL、CentOS)

  • update-ca-certificates (Ubuntu、Debian)

  • Firefox(仅限macOS和Linux)

  • Chrome and Chromium

  • Java( JAVA_HOME )

要获取 mkcert 的帮助页面,请传递该选项 --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.com'	
Generate "_wildcard.example.com.pem" and "_wildcard.example.com-key.pem".	

	
$ mkcert -pkcs12 example.com	
Generate "example.com.p12" instead of a PEM file.	

	
$ mkcert -uninstall	
Uninstall the local CA (but do not delete it).	

	
Change the CA certificate and key storage location by setting $CAROOT,	
print it with "mkcert -CAROOT".

您需要首先在系统信任库中安装本地 CA.

$ mkcert -install	

	
Created a new local CA at "/home/myfreax/.local/share/mkcert" ?	
The local CA is now installed in the system trust store! ⚡️

完成后,您可以开始为您的域名生成 SSL 证书。例如,我将生成一个对以下名称有效的新证书。

"mydomain.com"	
"*.mydomain.co"	
"myapp.net"	
"localhost"	
"127.0.0.1"	
"::1"

你可以使用如下命令对上面的域名生成证书。

$ mkcert mydomain.com '*.mydomain.co' myapp.net localhost 127.0.0.1 ::1

命令执行后,会输出以下内容。

Using the local CA at "/root/.local/share/mkcert" ✨	

	
Created a new certificate valid for the following names ?	
- "mydomain.com"	
- "*.mydomain.co"	
- "myapp.net"	
- "localhost"	
- "127.0.0.1"	
- "::1"	
The certificate is at "./mydomain.com+5.pem" and the key at "./mydomain.com+5-key.pem" ✅

证书生成完后,你也可以查看证书的内容。

$ cat ./mydomain.com+5.pem
  1. 测试 mkcert 证书

现在让我们使用一个简单的 Nginx 配置文件测试 mkcert 证书。这个例子是在 Ubuntu 16.04 系统上完成的。

  1. 安装一个 Nginx 服务器

$ sudo apt-get install nginx
  1. 创建一个简单的网页

$ echo 'Hello Hi-Linux.com !' > /var/www/test/index.html
  1. 配置一个简单的 HTTPS 服务器

$ cat /etc/nginx/conf.d/test.conf 	
server {	
   listen 80;	
   server_name mydomain.com myapp.net;	
   root /var/www/test;	
}	

	
server {	
   listen *:443 ssl http2;	
   root /var/www/test;	
   server_name mydomain.com myapp.net;	
   ssl_certificate /home/jmutai/mydomain.com+5.pem; 	
   ssl_certificate_key /home/jmutai/mydomain.com+5-key.pem;	
}
  1. 确保您的 /etc/hosts 文件包含已使用域名的记录。

$ cat/etc/hosts	

	
127.0.0.1 myapp.net	
127.0.0.1 mydomain.com

打开浏览器并使用提供的域名,你应该得到一个带有绿色安全图标的地址栏,至此创建一个受信任的本地 SSL 证书就完成了。

来源:myfreax

原文:http://t.cn/AiRQ3uFJ

题图:来自谷歌图片搜索

版权:本文版权归原作者所有

投稿:欢迎投稿,邮箱: editor@hi-linux.com

640?wx_fmt=gif

640?wx_fmt=png

你可能还喜欢

点击下方图片即可阅读

可能是东半球最好的 Curl 学习指南,强烈建议收藏!

640?wx_fmt=png

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android中信任SSL证书的步骤如下: 1. 将证书文件放到Android项目的assets文件夹下。 2. 创建一个TrustManager来处理证书。 ```java public class TrustAllCerts implements X509TrustManager { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } } ``` 3. 创建一个SSLContext实例,并使用TrustManager初始化它。 ```java try { InputStream inputStream = context.getAssets().open("证书文件名"); CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); Certificate certificate = certificateFactory.generateCertificate(inputStream); KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); keyStore.load(null, null); keyStore.setCertificateEntry("ca", certificate); String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(tmfAlgorithm); trustManagerFactory.init(keyStore); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, trustManagerFactory.getTrustManagers(), null); HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); } catch (Exception e) { e.printStackTrace(); } ``` 4. 在请求时设置HTTPS连接方式。 ```java URL url = new URL("https://www.example.com"); HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection(); httpsURLConnection.setRequestMethod("GET"); httpsURLConnection.setConnectTimeout(5000); httpsURLConnection.setReadTimeout(5000); httpsURLConnection.setDoInput(true); httpsURLConnection.setDoOutput(true); ``` 这样就可以信任SSL证书了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值