首页 > 其他分享 >局域网自签名https证书

局域网自签名https证书

时间:2024-12-31 14:33:04浏览次数:6  
标签:https crt 证书 局域网 rootCA 域名 key todocoder

1、证书生成

生成密钥,采用的是des3算法

openssl genrsa -des3 -out server.key 2048

 

根据密钥签发申请文件CSR

openssl req -new -key server.key -out server.csr
#这一步主要是去除密钥的密码,便于后续部署
openssl rsa -in server.key -out server.key
#生成自签名根证书并设置证书的有效期,crt是发给客户端的证书
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
#有的需要pem的证书,对证书做的转换
openssl x509 -in server.crt -out server.pem -outform PEM

 

2、配置Nginx

server {
    listen 8080 ssl; #端口增加SSL支持
    server_name _;
        charset utf-8;
    # ssl on;
    ssl_certificate /data/app/nginx/nginx/cert/server.crt;# 证书文件
    ssl_certificate_key /data/app/nginx/nginx/cert/server.key; #私钥文件
    # access_log ./logs/access_stream.log main;
    # error_log ./logs/error_stream.log;

    location / {
                root /home/nginx/knowledge2.0/;
                index index.html;
        }

        error_page 500 502 503 504  /50x.html;
        location = /50x.html {
                root html;
        }
}

  

3、浏览器访问
使用https协议访问8080端口,但是会提示证书不可信,后面我们会详细讲解怎样解决这个问题。

对于浏览器提示证书不可信,由于采用的自签名证书,浏览器是没有我们的自签名证书导致

 

4、证书不可信解决方案
生成证书时候增加ext.ini

extendedKeyUsage = serverAuth, clientAuth
basicConstraints = CA:FALSE
keyUsage = nonRepudiation,digitalSignature,keyEncipherment
subjectAltName = @alt_names


[alt_names]
IP.1=172.1.0.1
DNS.1=www.test.com

  

然后重新使用Openssl重新生成证书,上述配置说明该证书是IP或者域名所有的:

openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt -extfile ext.ini
生成证书,然后导出crt证书,在windows下加入到信任的根证书下面,再次访问浏览器,浏览器访问不会报错

 

二、基于域名的https

 

证书相关文件格式说明
.key: 私钥文件
.pem: 根证书公钥
.crt: 域名证书公钥

自签名文件的生成过程
这里用的工具是openssl,怎么安装可以自行查一下

普通域名的自签名
我们以域名 td.todocoder.com为例

创建证书目录:/root/cert,进入/root/cert 创建 rootCA.key
$ openssl genrsa -des3 -out rootCA.key 2048
使用生成的密钥(rootCA.key)来创建新的根SSL证书。并将其保存为rootCA.pem,证书有效期为10年
$ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.pem

  

输入第一步设置的密码

Enter pass phrase for rootCA.key:
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Zhengzhou
Locality Name (eg, city) []:Zhengzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:todocoderCA
Organizational Unit Name (eg, section) []:todocoderCA
Common Name (e.g. server FQDN or YOUR name) []:RootTodoCoder Cert
Email Address []:todocoder@github.com

  

这一行是把pem 转换成 crt格式

$ openssl x509 -outform der -in rootCA.pem -out rootCA.crt
提示填写的字段大多都可以直接回车过就行了,只要Common Name字段需要填写内容,这是生成跟证书后导入到系统的证书名称,我填的是RootTodoCoder Cert

创建生成域名ssl证书的前置文件
在这里我生成一个 td.todocoder.com 的域名证书。创建一个td.ext文件,以创建一个X509 v3证书。注意我们指定了subjectAltName选项。

cat >> td.ext <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName=@alt_names

[alt_names]
DNS.1 = td.todocoder.com
EOF
这里的 [alt_names] 域中即为我们需要指定的 subjectAltName,可以配置多个 IP,DNS 或其他值。

生成域名ssl证书秘钥(tdtodocoder.csr、tdtodocoder.key)
$ openssl req -new -sha256 -nodes -out tdtodocoder.csr -newkey rsa:2048 -keyout tdtodocoder.key

Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Zhengzhou
Locality Name (eg, city) []:Zhengzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:todocoder
Organizational Unit Name (eg, section) []:todocoder
Common Name (e.g. server FQDN or YOUR name) []:td.todocoder.com
Email Address []:todocoder@github.com
A challenge password []:rootCA
An optional company name []:todocoder

  

这一步填写域名证书密钥需要的信息,会展示在浏览器的域名证书信息,其中最重要的是Common Name的内容,必须是对应需要https访问的域名的。

通过我们之前创建的根SSL证书颁发,创建出一个 test.testcloudide.com 的域名证书。输出是一个名为的证书文件ttestcloudide.crt(对应位置替换为自己的文件路径)

$ openssl x509 -req -in tdtodocoder.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out tdtodocoder.crt -days 500 -sha256 -extfile td.ext
以上,我们把域名 td.todocoder.com的证书已经创建好了,文件目录如下:

.
├── rootCA.crt
├── rootCA.key
├── rootCA.pem
├── td.ext
├── tdtodocoder.crt
├── tdtodocoder.csr
└── tdtodocoder.key

  

接下来我们看一下,在nginx 和k8s中是如何用的。

nginx 配置域名td.todocoder.com的证书
我们拿到上面几步生成的 td.todocoder.com域名的文件,tdtodocoder.key、tdtodocoder.crt
配置到nginx的配置中

server {
      listen 443 ssl;
      # 以td.todocoder.com域名访问
      server_name td.todocoder.com;

      # 配置ssl域名证书
      ssl_certificate     [ssl证书路径]/tdtodocoder.crt;
      ssl_certificate_key [ssl证书路径]/tdtodocoder.key;

      index index.html index.php;
      # 反向代理需要被访问的本地服务
      location / {
        proxy_pass http://localhost:8080;
      }
      ...
  }
自签名的域名访问需要配置host
vi /etc/hosts
192.168.111.37 td.todocoder.com

  

 

然后直接访问 td.todocoder.com 在浏览器上应该可以看到证书的信息,注意此时浏览器还提示的是证书无效,不安全。后面需要在操作系统信任一下证书就可以了。

如果你用的是k8s ,可以在ingress中配置

ingress配置tls证书
创建secret

$ kubectl -n todocoder create secret tls tdtodocoder-certs --key tdtodocoder.key --cert tdtodocoder.crt
# 重启ingress controller
$ kubectl rollout restart daemonset.apps/nginx-ingress-controller -n ingress-nginx
配置ingress yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-todocoder
  namespace: todocoder
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
    - hosts:
        - "td.todocoder.com"
      secretName: tdtodocoder-certs
  ingressClassName: nginx
  rules:
    - host: "td.todocoder.com"
      http:
        paths:
          - backend:
              service:
                name: todocoder-front
                port:
                  number: 8080
            path: /?(.*)
            pathType: ImplementationSpecific

  

以上,我们把域名 td.todocoder.com的证书已经创建好了,如果不创建泛域名的证书可以直接跳过泛域名的创建过程。接下来我们看一下泛域名证书的签名流程

泛域名的自签名
泛域名是域名前面的字符不是固定的,可能会根据id生成,比如,我的 id是:fsd423dsf234dsfs, 我自己的泛域名就是 fsd423dsf234dsfs.todocoder.com ,每个用户都可以有不同的域名。那么我们只需要配置 *.todocoder.com 这个域名就可以,具体操作流程如下:

从上面第3步开始,我们需要用同一个根证书签名,所以rootCA 的证书就不用再新建了

创建生成域名ssl证书的前置文件
创建一个fanym.ext文件, 注意我们指定了subjectAltName选项。

cat >> fanym.ext <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName=@alt_names

[alt_names]
DNS.1 = *.todocoder.com
EOF

  

注意:这里的 域名配置的 *.todocoder.com

生成域名ssl证书秘钥(fantodocoder.csr、fantodocoder.key)

$ openssl req -new -sha256 -nodes -out fantodocoder.csr -newkey rsa:2048 -keyout fantodocoder.key

Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Zhengzhou
Locality Name (eg, city) []:Zhengzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:fantodocoder
Organizational Unit Name (eg, section) []:fantodocoder
Common Name (e.g. server FQDN or YOUR name) []:*.todocoder.com
Email Address []:todocoder@github.com
...
A challenge password []:rootCA
An optional company name []:fantodocoder

  

这一步填写域名证书密钥需要的信息,会展示在浏览器的域名证书信息,其中最重要的是Common Name的内容,必须是对应需要https访问的域名的。

通过我们之前创建的根SSL证书rootCA.pem, rootCA.key颁发,创建出一个 *.todocoder.com 的域名证书。输出是一个名为的证书文件fantodocoder.crt(对应位置替换为自己的文件路径)

$ openssl x509 -req -in fantodocoder.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out fantodocoder.crt -days 500 -sha256 -extfile fanym.ext

Certificate request self-signature ok
subject=C = CN, ST = Zhengzhou, L = Zhengzhou, O = fantodocoder, OU = fantodocoder, CN = *.todocoder.com, emailAddress = todocoder@github.com
Enter pass phrase for rootCA.key:
当前的目录结构:

.
├── fantodocoder.crt
├── fantodocoder.csr
├── fantodocoder.key
├── fanym.ext
├── rootCA.crt
├── rootCA.key
├── rootCA.pem
├── td.ext
├── tdtodocoder.crt
├── tdtodocoder.csr
└── tdtodocoder.key
Nginx 配置
server {
      listen 443 ssl;
      server_name *.todocoder.com;
      # 配置ssl域名证书
      ssl_certificate     [ssl证书路径]/fantodocoder.crt;
      ssl_certificate_key [ssl证书路径]/fantodocoder.key;

      index index.html index.php;
      # 反向代理需要被访问的本地服务
      location / {
        proxy_pass http://localhost:8080;
      }
      ...
  }

  

我们用泛域名 fsd423dsf234dsfs.todocoder.com访问,访问之前需要配置hosts

vi /etc/hosts
192.168.111.37 fsd423dsf234dsfs.todocoder.com
访问 fsd423dsf234dsfs.todocoder.com 可以看到我们刚刚的泛域名证书信息。

截止到这一步,我们的域名在nginx或者k8s端已经配置完成,我们想要的效果是在https 访问的时候,不报错,并且提示证书安全有效,那么需要我们在我们的操作系统上配置信任证书

各个系统下证书的信任流程
mac 下证书的添加方式
mac系统只需要添加 域名证书就可以,不用添加rootCA 证书

在mac下我们拿到证书后,双击tdtodocoder.crt文件->打开钥匙串->选择信任

然后重启浏览器再访问 td.todocoder.com,可以看到显示https 安全了

Windows下证书的添加方式
Windows 需要添加 rootCA 和域名的证书到系统里面

如果要访问 td.todocodoer.com 需要安装 rootCA.crt、tdtodocoder.crt 这两个证书

双击CA根证书->存储位置选择本地->指定证书位置(受信任的根证书颁发机构)

ubuntu下证书的添加方式
我的系统是Ubuntu 桌面版 22.04 的版本, ubuntu需要添加 rootCA 和域名的证书到系统里面

拷贝证书到ca证书的目录
$ sudo cp tdtodocoder.crt /usr/share/ca-certificates/mozilla/tdtodocoder.crt
$ sudo cp fantodocoder.crt /usr/share/ca-certificates/mozilla/fantodocoder.crt
$ sudo cp rootCA.crt /usr/share/ca-certifi
cates/mozilla/rootCA.crt
执行下面的命令按提示选中新添加的证书,确定(点回车) ,选中(点空格键)然后选 ”OK” 就行了
$ sudo dpkg-reconfigure ca-certificates

Updating certificates in /etc/ssl/certs...
rehash: warning: skipping ca-certificates.crt,it does not contain exactly one certificate or CRL
rehash: warning: skipping rootCA.pem,it does not contain exactly one certificate or CRL
1 added, 0 removed; done.
正在处理用于 ca-certificates (20230311ubuntu0.22.04.1) 的触发器 ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

  

点回车,点空格选中 -> 回车确定

就可以了.

火狐浏览器证书的添加方式
Chrome,safari,Edge等浏览器直接就可以访问了,但是火狐浏览器(ubuntu桌面版火狐,其他系统的没试)的话需要在设置里面添加跟证书。具体操作:

点击设置-> 搜索证书,点击查看证书 -> 证书颁发机构 -> 导入 -> rootCA.crt -> 编辑信任

可以看到,火狐浏览器已经显示安全

参考
https://mp.weixin.qq.com/s/Qi2pDCBJYGymLJxBIvqvqg

 

标签:https,crt,证书,局域网,rootCA,域名,key,todocoder
From: https://www.cnblogs.com/jason-zhao/p/18643927

相关文章

  • 项目管理证书与敏捷方法论的结合应用
    项目管理证书与敏捷方法论的结合应用是当前项目管理领域中一个备受关注的话题。随着项目复杂性和不确定性的增加,传统的项目管理方法在应对快速变化的需求时显得力不从心。敏捷方法论以其灵活性和适应性,逐渐成为项目管理的主流方法之一。然而,项目管理证书如PMP(项目管理专业人士认证......
  • 云建站部署 SSL 证书遇到问题如何解决?
    云建站部署SSL证书时可能会遇到各种问题。首先,如果在登录独立控制面板部署SSL证书时提示账号密码错误,需要注意对应云建站可能不支持该独立控制面板管理,而是要通过主站去部署,可参考相关的部署教程进行操作。例如,某些云建站平台有特定的SSL证书部署流程,需要在主站的特定设置页......
  • 【网络基础知识】两台电脑不在一个城市,如何使这两台电脑构成一个局域网?
    两台电脑即使不在一个城市,通过一些非常规的技术方法,依然可以实现这两台电脑间的局域网构建。具体构建方法大致有以下几种,下面我们具体来了解一下。首先我们应对局域网有一个清晰认识,局域网简称LAN,是在一个具体区域内实现多台计算机设备的互联互通,在局域网内实现文件管理,数据共享......
  • iphone无法下载Charles证书如何解决抓包问题
    问题:iPhone连上代理以后,浏览器中输入chls.pro/ssl,无法下载。可以访问其他页面解决方法:1)在Charles--help--SaveCharlesRootCertificate,保寸.cer格式文件2)下载证书charles-ssl-proxying-certificate.cer3)Mac电脑与iPhone之间可以通过隔空传送,iphone手机接受文件以后,可以在......
  • 搬运优秀随笔:https://www.cnblogs.com/gaoshidong
    一、第一章:初识Java与面向对象程序设计Java简介:Java是一种面向对象的程序设计语言,具有跨平台、安全性高、可移植性强等特点。面向对象程序设计概述:面向对象是一种程序设计思想,将现实世界的事物抽象为对象,通过对象之间的交互来完成程序的功能。Java开发环境搭建:介绍了Java......
  • 干货!12个程序员证书​,含金量超高。从零基础到精通,收藏这篇就够了!
    近来IT行业成为了发展前景好高薪资的大热门,越来越多的人选择参加各种各样的计算机考试,就是为了拿含金量高的证书,提升自己的职场竞争力。那么程序员有哪些含金量高的证书可以考?下面小编将详细介绍一下含金量高的IT证书,避免大家在不需要的考试上浪费时间。01软考软考,全称......
  • 使用Windows和FFmpeg 将https://xxx.com/xx.m3u8 推流到B站
    要将一个.m3u8流推送到B站(哔哩哔哩直播平台),你可以使用FFmpeg工具。下面是一个大致的步骤:前提条件你已经拥有B站的直播推流地址。已经安装并配置了FFmpeg。将FFmpeg添加到Windows环境变量打开系统环境变量设置:方法1:右键点击“此电脑”或“计算机”,选择“属......
  • 请问宝塔面板无法申请SSL证书怎么办
    当您在宝塔面板中尝试为站点申请SSL证书时遇到失败,这可能是由多个因素引起的。以下是详细的排查步骤和解决方案:域名解析问题:SSL证书的申请通常需要验证域名的所有权。如果域名没有正确解析到服务器IP地址,SSL证书提供商将无法通过验证。请确保所有绑定的域名都已正确解析到您的......
  • 宝塔面板无法申请SSL证书
    您好,关于您提到的宝塔面板无法申请SSL证书的问题,我们来详细分析并提供解决方案。首先,宝塔面板申请SSL证书时可能会遇到多种原因导致失败。根据您的描述,您在尝试为第一个站点绑定三个域名时都提示失败。这可能是由于以下几个常见原因:域名解析问题:SSL证书的申请通常需要验证域......
  • 如何在同一台服务器上安装多个SSL证书?
    您好,当您需要在同一台服务器上为多个域名安装不同的SSL证书时,可以按照以下步骤进行操作:理解多证书共存原理:在同一台服务器上安装多个SSL证书是完全可行的。每个站点可以绑定一个独立的SSL证书,只要它们监听不同的域名即可。对于泛域名证书,它可以覆盖多个子域名,但具体实现方式......