当前位置: 首页 > news >正文

如何使用OpenSSL自签证书(Self-Sign Certificate)


本文转自 桌面虚拟化 51CTO博客,原文链接:http://blog.51cto.com/vmwareeuc/1945888


当您访问自己组织或个人的服务时是否经常遇到如下的证书问题:

wKioL1lfZerjLe5bAABfIvD5xto145.png-wh_50

当然,您可以容忍此错误,Continue to this website。 或者从CA(证书颁发机构)购买SSL证书,除此之外我们是否还有更多的选择呢?

是的,我们可以使用OpenSSL创建个人的免费证书


OpenSSL

OpenSSL是大多数MacOS X,Linux,和Unix安装的免费工具。 您还可以在 http://slproweb.com/products/Win32OpenSSL.html 下载Windows版本进行使用。 使用OpenSSL创建自签名证书的过程非常简单:

  1. 生成CA根证书

        1) 创建私钥(rootCA.key)

        2) 创建CA根证书(rootCA.crt)

        3) 安装CA根证书

  2. 生成CA自签证书

        1) 创建私钥

        2) 创建CSR

        3) 使用CA根证书签名CSR


生成CA根证书

  1. 创建私钥

    openssl genrsa -out rootCA.key 2048

    私钥的标准大小为 1024/2048/4096,请根据需要进行选择。

    还可以创建加密私钥:

    openssl genrsa -des3 -out rootCA.key 2048
  2. 创建CA根证书

    openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt

    此时需要输入一些如下相关信息:

    -----
    Country Name (2 letter code) [AU]:CN
    State or Province Name (full name) [Some-State]:Beijing
    Locality Name (eg, city) []:Beijing
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:VMware
    Organizational Unit Name (eg, section) []:Euc
    Common Name (eg, YOUR name) []:CA
    Email Address []:none@none.com

  3. 安装CA根证书

    1) IE & Chrome

        IE:  Internet Options->Content->Certificates

        Chrome: Settings->Advanced->Privacy and security->Manage certificates

    IE & Chrome 都会指定到相同的 windows certificate repository,选择"Trusted Root Certification Authorities", Import "rootCA.crt"

    wKiom1lfVdqAGc0aAACI9Goo-Rg153.png-wh_50

    2) Firefox

        Options->Advanced->Certificates->View Certificates

       wKioL1lfV06y_nM8AACb8kD98VU114.png-wh_50

      

生成CA自签证书


  1. 创建私钥

    openssl genrsa -out server.key 2048
  2. 创建CSR

    1)配置Subject-Alternative-Name 否则会出现No subject alternative names错误

        a. 找到并拷贝“openssl.cnf”文件, Linux机器文件位置为"/etc/ssl/openssl.cnf"。

        如果无法找到该文件可以从http://web.mit.edu/crypto/openssl.cnf 复制一份。

        b. 编辑拷贝的openssl.cnf”文件

          (1) 在 [req ] 节点下取消对req_extensions= v3_req 的注释

          (2) 在[v3_req] 节点下添加 subjectAltName 属性

    [ v3_req ]

    # Extensions to add to a certificate request

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

    [alt_names]
    IP.1 = xxx.xxx.xxx.xxx
    IP.2 = xxx.xxx.xxx.xxx
    DNS.1 = xxx.xxx.com

                       

                    Ip ,DNS 为服务器(Server)的IP与DNS。

                    更多相关Subject-Alternative-Name的介绍:https://www.openssl.org/docs/man1.0.2/apps/x509v3_config.html#Subject-Alternative-Name

          (3) 在[ CA_default] 节点下取消对copy_extensions= copy 的注释

       2) 创建CSR

    openssl req -new -key server.key -out server.csr -config {yourpath}/openssl.cnf -extensions v3_req


    注意:此时需要输入除Common Name (eg, YOUR name) []外与创建CA根证书时相同的信息。此处Common Name 应该输入服务器(Server)的Ip或域名(与在浏览器地址栏需要访问的保持一致)


  3. 使用CA根证书签名CSR

    openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extensions v3_req -extfile openssl.cnf

注意: server.crt 的时间期限(-days)不能超过CA根证书的时间期限



完成以上步骤以后,使用自签证书再次访问服务器时,浏览器将会信任证书。

wKioL1li4RigCiYTAAXQeie8Eb8397.png-wh_50




作者:李少杰,VMware China EUC Customer Success Team 

相关文章:

  • 为什么,博主我要写下这一系列windows实用网络?
  • CentOS系统中出现错误--SSH:connect to host centos-py port 22: Connection refused
  • 笔记本外接显示器切换失败原因
  • 用路由标记过滤路由更新
  • 简单干净的C#方法设计案例:SFCUI.AjaxValue()之三
  • 各版本最新的Visual C++可再发行组件包(Redistributable Package)下载和合集
  • 这样出ORACLE的面试题
  • 软编码和硬编码概念的区分与背后设计思想?
  • Operations Manager 2007 代理部署到基于 Windows 的计算机-Part 2
  • 硬盘安装linux.让XP和linux共存!
  • 深入浅出web请求
  • 微软同步框架入门之七--定制同步提供程序(SyncProvider)
  • 《maven实战》学习笔记6——maven聚合和继承
  • 关于事务和丢失更新
  • SAP R3 display Vendor list, MKVZ .
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • .pyc 想到的一些问题
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【comparator, comparable】小总结
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • Golang-长连接-状态推送
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Javascript设计模式学习之Observer(观察者)模式
  • JSONP原理
  • LintCode 31. partitionArray 数组划分
  • 当SetTimeout遇到了字符串
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 类orAPI - 收藏集 - 掘金
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 详解移动APP与web APP的区别
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 最近的计划
  • 阿里云ACE认证学习知识点梳理
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #define 用法
  • #include<初见C语言之指针(5)>
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (C++20) consteval立即函数
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • @ComponentScan比较
  • @html.ActionLink的几种参数格式
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [C++] sqlite3_get_table 的使用