首页 > 其他分享 >OpenSSL 生成 RootCA (根证书)并自签署证书(支持 IP 地址)

OpenSSL 生成 RootCA (根证书)并自签署证书(支持 IP 地址)

时间:2023-10-10 15:12:55浏览次数:34  
标签:crt RootCA 证书 IP CA 0.2 key 10.12

背景

某机房内部访问需要配置 HTTPS,网上找的一些证书教程都不是特别好,有些直接生成证书,没有根 CA 的证书导致信任不了 Ubuntu 机器,有些教程只有域名生成,没有 IP 生成,有些甚至报错。故发一个笔者在 Ubuntu 22.04 机器上测试正确可用的流程,这里使用 10.12.0.2 作为例子生成一个证书。

生成

  1. 生成根 CA 的私钥和证书

    # 生成根 CA 的私钥
    openssl genrsa -out rootCA.key 2048
    
    # 使用私钥生成根 CA 的证书
    openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt
    
  2. 10.12.0.2 生成私钥和证书请求文件(CSR)

    # 生成 10.12.0.2 的私钥
    openssl genrsa -out 10.12.0.2.key 2048
    
    # 使用私钥生成证书请求文件
    openssl req -new -key 10.12.0.2.key -out 10.12.0.2.csr
    
  3. 创建证书扩展文件

    为了确保为 10.12.0.2 签名的证书能够用作服务器身份验证,需要为它创建一个扩展文件。创建一个名为 v3.ext 的文件,并添加以下内容:

    authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    subjectAltName = @alt_names
    
    [alt_names]
    # 这里 IP 替换成 DNS 就可以签名域名了
    IP.1 = 10.12.0.2
    
  4. 使用根 CA 的证书为 10.12.0.2 签名证书

    openssl x509 -req -in 10.12.0.2.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out 10.12.0.2.crt -days 500 -sha256 -extfile v3.ext
    

此时文件夹内应该有以下文件:

  • rootCA.key - 根 CA 的私钥。
  • rootCA.crt - 根 CA 的证书。
  • 10.12.0.2.key - 10.12.0.2 的私钥。
  • 10.12.0.2.csr - 10.12.0.2 的证书请求文件。
  • 10.12.0.2.crt - 由根 CA 签名的 10.12.0.2 的证书。

信任

Ubuntu

sudo cp rootCA.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

CentOS

sudo cp rootCA.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust

Windows

右键文件,选择安装证书,选择本地计算机,指定安装到受信任的根证书颁发机构,即可

使用

这里拿 ASP.NET CORE 无反代部署举例,复制 10.12.0.2.key10.12.0.2.crt 文件到应用发布目录,之后在 appsettings.json 里加入或修改如下内容,并重启服务即可。

{
  // 上面是其他内容
  "Kestrel": {
    "Endpoints": {
      "Https": {
        "Url": "https://*",
        "Certificate": {
          "Path": "./10.12.0.2.crt",
          "KeyPath": "./10.12.0.2.key"
        }
      }
    }
  }
}

标签:crt,RootCA,证书,IP,CA,0.2,key,10.12
From: https://www.cnblogs.com/aobaxu/p/17754721.html

相关文章

  • http 中使用 gzip 输出内容时,如何预先压缩前一半页面?
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯背景是这样:要输出一个很大的动态页面,不开gzip压缩会使得流量很大;开了gzip压缩又会导致cpu升高。这个页面的前半部分一般不会变化,变化的是后半部分。因此,能不......
  • 在hadoop虚拟机里面使用hadoop jar运行打包文件,出现Exception in thread "main" org.a
    问题描述更改了JDK版本之后,再次运行又出现了这个错误:问题解决经过查阅相关资料,发现是自己定义的hdfs的路径不太对,本来写的是这样的:然后自己确实不记得配置环境时配置的是多少,就看了看这个文件core.site.xml:catcore-site.xml然后看到这里:使用的端口号是8020,改成跟环境......
  • 前端面试八股文 JavaScript
    前端面试八股文JavaScript谈谈对原型链的理解在JavaScript中,每个对象都有一个原型对象proto,指向其构造函数的原型对象prototype。当我们创建一个新的实例对象时,这个对象会从其构造函数的原型对象prototype中继承属性和方法。如果实例对象自身没有某个属性或方法,但是其构造函数......
  • NOIPTG联合权值
    P1351[NOIP2014提高组]联合权值我们对于每个点计算它的子结点的\(\sumw,\maxw\)。如图,发现贡献有三类:直接计算。需要剔除自己这个点,对于sum直接减去即可,对于max维护一个次大值,发现这个点是最大值用次大值代替。枚举子节点,然后直接利用子节点的\(\sum,\max\)信......
  • typescript: Flyweight Pattern
     /***FlyweightPattern享元是一种结构型设计模式,它允许你在消耗少量内存的情况下支持大量对象。*https://refactoringguru.cn/design-patterns/flyweight/typescript/example#lang-features*TheFlyweightstoresacommonportionofthestate(alsocalledintr......
  • 用友BIP商业网络-银企联助力新钢联集团结算效率高效提升
    新钢联集团成立于2007年8月,是集生产、研发、营销、工贸等产业为一体,跨地区、集团化铬铁生产企业,是国内铬系合金产品专业生产重点企业。目前,集团在中国、南非、津巴布韦和印尼拥有四个生产基地,其中国内生产基地位于内蒙古乌兰察布市境内,实现高碳铬铁年产能270万吨,年产值180亿元,现有......
  • 基于Java Swing和BouncyCastle的证书生成工具
    "Almostnoonewillrememberwhathehadjustnotinterested."-Nobody“几乎没有人会记得他所丝毫不感兴趣的事情。”——佚名0x00大纲目录0x00大纲0x01前言0x02技术选型0x03需求分析目标用户用户故事功能需求安全需求兼容需求性能需求0x04原型设计主窗体RSA根......
  • 如何在Jenkins Pipeline中接入SonarQube进行代码扫描
    随着软件开发项目的不断增多,代码质量的管理变得愈发重要。SonarQube是一个开源的代码质量管理平台,它可以帮助开发团队发现和修复代码中的各种问题,从而提高代码的质量。而Jenkins是一个广泛使用的持续集成和持续交付工具,它可以自动化构建、测试和部署应用程序。本文将介绍如何在Jen......
  • Go - Flipping an Image Upside Down
    Problem: Youwanttoflipanimageupsidedown.Solution: Convertanimagetoagridofpixels.Swapthepositionsofthetopandbottompairsofpixelsandmovedowntoswapthenextpairuntilallthepixelpositionsareswapped.Convertthegridofpi......
  • JavaScript 浮点数运算的精度问题
    来源:https://zhuanlan.zhihu.com/p/191395766问题描述在JavaScript中整数和浮点数都属于 Number 数据类型,所有数字都是以64位浮点数形式储存,即便整数也是如此。所以我们在打印 1.00 这样的浮点数的结果是 1 而非 1.00 。在一些特殊的数值表示中,例如金额,这样看上去......