1. 安装 openssl
参考链接:

有4种安装包:

Win64 OpenSSL v1.1.1i Light,安装Win64 OpenSSL v1.1.1i最常用的软件包

Win64 OpenSSL v1.1.1i,安装Win64 OpenSSL v1.1.1i完整软件包

Win32 OpenSSL v1.1.1i Light,安装Win32 OpenSSL v1.1.1i最常用的软件包

Win32 OpenSSL v1.1.1i,安装Win32 OpenSSL v1.1.1i完整软件包

1.1 一般默认安装,但安装步骤中有一步,“Select Additional Tasks”,让选择OpenSSL的dll拷贝到什么地方,如下:

1.2 建议,不要拷贝到系统目录下,如果其他软件使用的OpenSSL版本与你安装这个版本不同,可能导致该软件无法使用。所以让这些dll待在OpenSSL安装目录下即可。

最后一步,是否捐款,如下:

1.3 验证安装是否正确

直接在cmd中,输入命令,查看OpenSSL版本

openssl version -a

结果,并不是我们安装的1.1.1i版

原因: 如果电脑上已经安装过其他软件,比如Git、VMware、Strawberry等,那么他们都自带了openssl,如下:

所以,当你在cmd中使用openssl命令时,可能会调用到其他版本的openssl。

解决办法: 将openssl 1.1.1i版本命令行工具路径添加到,系统变量Path第一条,以保证它首先被找到。

再次验证,查看OpenSSL版本正确。

2. 使用 openssl 生成自签名证书

使用 OpenSSL 来生成自签名证书。以下是一种常见的方法:

  1. 生成 CA 根证书: 对于同一个项目一般 1 只执行一次 (只有一套根证书)
  2. 生成服务端自签名证书: 执行下面 1、2 才能生成客户端自签名证书 (利用 CA 生成服务端证书).
  3. 生成客户端自签名证书: 1、3 才能生成服务端自签名证书 (利用 CA 生成客户端证书).

2.1. 生成 CA 根证书

2.1.1. 生成 CA 私钥(Private Key):生成的文件在 cmd 当前目录下

openssl genpkey -algorithm RSA -out ca.key -pkeyopt rsa_keygen_bits:2048

上面命令解释

这个命令是用来生成 RSA 私钥的:

  1. openssl genpkey:这是 OpenSSL 的一个命令,用于生成私钥。OpenSSL 是一个强大的安全套接字层密码库,包含了许多用于处理证书的实用工具。
  2. -algorithm RSA:这个参数指定了要生成的私钥的类型,这里是 RSA。RSA 是一种常用的公钥加密算法。
  3. -out ca.key:这个参数指定了生成的私钥文件的输出位置。私钥会被保存在名为 ca.key 的文件中。
  4. -pkeyopt rsa_keygen_bits:2048:这个参数指定了 RSA 私钥的长度,这里是 2048 位。私钥的长度决定了加密的强度,长度越长,加密越强,但计算也越复杂。2048 位是目前广泛使用的长度,它提供了足够的安全性,同时不会对计算性能产生太大的影响。

所以,总的来说,这个命令就是生成一个 2048 位的 RSA 私钥,并将它保存在 ca.key 文件中。

验证生成 rsa 私钥正确性

openssl rsa -in 私钥文件(xxx.xxx) -check

eg:

D:\workspace\openssl>openssl rsa -in ca.key -check

RSA key ok

writing RSA key

-----BEGIN PRIVATE KEY-----

MIIEvAgEAAoIBAQCtycpFvPM0P2Ke...省略

-----END PRIVATE KEY-----

看到 RSA key ok 说明 RSA 私钥正确

2.1.2. 生成 CA 证书签名请求: 使用私钥生成证书签名请求(CSR,Certificate Signing Request)

openssl req -new -sha256 -key ca.key -subj "/C=CN/O=zz/CN=127.0.0.1" -out ca.csr

上面命令解释

  1. openssl req -new:这是用来生成一个新的 CSR 的命令。
  2. -sha256:这个参数表示使用 SHA-256 哈希算法。SHA-256 是一种安全哈希算法,它生成的哈希值的长度是 256 位。这比默认的 SHA-1 更安全,因为 SHA-1 的哈希值长度只有 160 位,而且已经被证明存在碰撞攻击的风险。
  3. -key ca.key:这个参数指定了你的私钥文件的位置。这个私钥将被用来生成你的公钥和签名。
  4. -subj "/C=US/ST=California/L=San Francisco/O=Your Company Name/CN=yourdomain.com":这个参数指定了证书的主题信息. 这是一个 X.500 标准的字符串,用于唯一地标识证书的主体.
    1. /C=: 国家名(Country Name)CN
    2. /ST=:州或省份名(State or Province Name)
    3. /L=:城市或区域名(Locality Name)
    4. /O=:组织名(Organization Name)
    5. /OU=:组织单位名(Organizational Unit Name)
    6. /CN=:公用名(Common Name)127.0.0.1(或 yourdomain.com)
    7. /emailAddress=:电子邮件地址
  1. -out ca.csr:这个参数指定了生成的 CSR 文件的输出位置。

2.1.3. 生成 CA 根证书:使用刚才生成的私钥和 CSR 来生成根证书:

openssl x509 -req -days 365 -sha256 -in ca.csr -signkey ca.key -CAcreateserial -out ca.crt

这个命令将生成一个有效期为 365 天的证书。

注意,这个证书是自签名的,所以它不会被任何公认的证书颁发机构(CA)信任。如果想要一个被公认的 CA 信任的证书,需要将刚才生成的 CSR 发送给一个 CA,并按照他们的指示来获取证书。

上面命令解释

这个命令是用来生成自签名的 X.509 证书的。下面是每个部分的详细解释:

  1. openssl x509:这是 OpenSSL 的一个命令,用于处理 X.509 证书。X.509 是一种常用的证书格式。OpenSSL 是一个强大的安全套接字层密码库,包含了许多用于处理证书的实用工具。
  2. -req:这个参数指示 OpenSSL 从一个证书签名请求(CSR)生成一个证书。
  3. -days 365:这个参数指定了证书的有效期,这里是 365 天。
  4. -sha256:这个参数指定了用于签名证书的哈希算法,这里是 SHA-256。
  5. -in ca.csr:这个参数指定了证书签名请求文件的位置,这里是 request.csr。
  6. -signkey ca.key:这个参数指定了用于签名证书的私钥文件的位置,这里是 ca.key。
  7. -CAcreateserial: 参数会告知OpenSSL为这个新的证书创建一个唯一的序列号
  8. -out ca.crt:这个参数指定了生成的证书文件的输出位置,这里是 ca.crt。
  9. -nodes 选项指示 OpenSSL 不要为私钥设置密码(这里没有使用)

所以,总的来说,这个命令就是从 ca.csr 文件中读取证书签名请求,使用 ca.key 文件中的私钥签名证书,然后将生成的证书保存在 ca.crt 文件中。证书的有效期是 365 天,签名算法是 SHA-256。

对 8 的解释: -nodes 是一个 OpenSSL 的命令行选项,它告诉 OpenSSL 在生成私钥文件时不要对其进行加密。如果没有这个选项,OpenSSL 默认会使用一个密码对私钥进行加密,这意味着每次使用这个私钥(例如,启动一个使用这个私钥的 HTTPS 服务器)时,都需要提供这个密码。

如果你使用 -nodes 选项,私钥文件就不会被加密,因此在使用私钥时不需要输入密码。这在自动化环境中很有用,例如,如果你正在配置一个自动启动的 HTTPS 服务器,你可能不希望在每次启动服务器时都需要手动输入密码。

然而,不加密私钥也有一些安全风险。任何可以访问私钥文件的人都可以使用这个私钥,因此你需要确保私钥文件的权限设置正确,以防止未经授权的访问。如果你的私钥文件被盗,攻击者可以使用它来冒充你的服务器,这可能导致各种安全问题。

2.1.4. 这步可以省略 - 生成 CA 公钥: 也可以使用刚才第一步生成的的私钥生成公钥(Public Key):

openssl rsa -pubout -in ca.key -out ca.value

上面命令解释

这个命令用于从已存在的 RSA 私钥中提取出公钥。下面是每个部分的详细解释:

  1. openssl rsa:这是 OpenSSL 的一个命令,用于处理 RSA 私钥。OpenSSL 是一个强大的安全套接字层密码库,包含了许多用于处理证书的实用工具。
  2. -pubout:这个参数指示 OpenSSL 从私钥中提取出公钥。
  3. -in ca.key:这个参数指定了私钥文件的位置,这里是 ca.key。
  4. -out ca.value:这个参数指定了生成的公钥文件的输出位置,这里是 ca.value。

所以,总的来说,这个命令就是从 ca.key 文件中提取出公钥,并将它保存在 ca.value 文件中。

2.2 生成服务端自签名证书:

2.2.1. 生成服务端私钥(Private Key):

openssl genpkey -algorithm RSA -out server.key -pkeyopt rsa_keygen_bits:2048

2.2.2. 生成服务端证书签名请求:

openssl req -new -sha256 -key server.key -subj "/C=CN/O=zz/CN=127.0.0.1" -out server.csr

2.2.3. 生成服务端证书

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256

2.3 生成客户端自签名证书:(和 2 流程几乎一样, 只是名字变成 client)

2.3.1. 生成服务端私钥(Private Key):

openssl genpkey -algorithm RSA -out client.key -pkeyopt rsa_keygen_bits:2048

2.3.2. 生成服务端证书签名请求:

openssl req -new -sha256 -key client.key -subj "/C=CN/O=zz/CN=127.0.0.1" -out client.csr

2.3.3. 生成服务端证书

openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365 -sha256

安装并使用 openssl 生成证书的更多相关文章

  1. 使用OpenSSL生成证书

    使用OpenSSL生成证书 下载安装openssl,进入/bin/下面,执行命令(把ssl目录下的openssl.cnf 拷贝到bin目录下)1.首先要生成服务器端的私钥(key文件):openssl ...

  2. [转帖] ./demoCA/newcerts: No such file or directory openssl 生成证书时问题的解决.

    接上面一篇blog 发现openssl 生成server.crt 时有问题. 找了一个网站处理了一下: http://blog.sina.com.cn/s/blog_49f8dc400100tznt. ...

  3. CentOS6系统openssl生成证书和自签证书

    CentOS6系统openssl生成证书和自签证书的过程,记录一下,本文基于CentOS 6 64bit.$ yum install openssl openssl-devel 1,生成服务器端的私钥 ...

  4. 如何利用OpenSSL生成证书

    此文已由作者赵斌授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.前言 最近为了测试内容分发网络(Content Delivery Network,简称 CDN)添加的新功 ...

  5. openssl 生成证书基本原理

    摘自:http://blog.csdn.net/oldmtn/article/details/52208747 1. 基本原理 公司一个项目要进行交易数据传输,因为这个项目银行那边也是刚刚开始启动,所 ...

  6. 使用OpenSSL生成证书并配置Https

    1.密钥.证书请求.证书概要说明 在证书申请签发过程中,客户端涉及到密钥.证书请求.证书这几个概念.我们以申请证书的流程说明三者的关系.客户端(相对于CA)在申请证书的时候,大体上有三个步骤: 第一步 ...

  7. OpenSSL生成证书详解 如何使用OpenSSL生成自签证书 转载

    原文:http://my.oschina.net/fajar/blog/425478 使用OpenSSL生成自签证书(亲测) 一,前言 读过我博客的小伙伴儿都知道,我一般在前言里面会提到为什么写这篇博 ...

  8. openssl生成证书 - CSDN博客

    大家都可以生成公钥.私钥对,无法确认公钥对到底是谁的. 如果能够确定公钥到底是谁的,就不会有这个问题了.例如,如果收到“黑客”冒充“服务器”发过来的公钥,经过某种检查,如果能够发现这个公钥不是“服务器 ...

  9. 使用 openssl 生成证书

    一.openssl 简介 目前最流行的 SSL 密码库工具官网:https://www.openssl.org/source/ 构成部分 密码算法库 密钥和证书封装管理功能 SSL通信API接口 用途 ...

  10. PHP通过OpenSSL生成证书、密钥并且加密解密数据,以及公钥,私钥和数字签名的理解

    一.公钥加密假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥. 我有一个文件,不能让别人看,我就用1加密了.别人找到了这个文 ...

随机推荐

  1. 函数计算GB镜像秒级启动:下一代软硬件架构协同优化揭秘

    简介: 优化镜像加速冷启动大致分为两种做法:降低绝对延迟和降低冷启动概率.自容器镜像上线以来我们已经通过镜像加速技术,分阶段降低了绝对延迟.本文在此基础上,介绍借助函数计算下一代IaaS底座神龙裸金属 ...

  2. 云原生消息、事件、流超融合平台——RocketMQ 5.0 初探

    简介: 今天分享的主题是云原生消息事件流超融合平台 RocketMQ 5.0 初探,内容主要分为三个部分: 首先,带大家回顾业务消息领域首选 RocketMQ 4 发展历史以及 4.x 版本的演进与发 ...

  3. 如何避免出现SQL注入漏洞

    ​简介: 本文将针对开发过程中依旧经常出现的SQL编码缺陷,讲解其背后原理及形成原因.并以几个常见漏洞存在形式,提醒技术同学注意相关问题.最后会根据原理,提供解决或缓解方案. ​ 作者 | 阿里云安全 ...

  4. [FAQ] uni-app 导航路由切换时如何强制刷新页面?

    使用 this.$forceUpdate() 强制刷新页面. Refer:uni-app自定义导航 Link:https://www.cnblogs.com/farwish/p/13870801.ht ...

  5. dotnet OpenXML 读取 PPT 主序列进入退出强调动画

    本文告诉大家如何读取 PPT 文件里面,放在主动画序列 MainSequence 的进入和退出和强调的动画,和在 OpenXML 里面的存放方式 如以下的课件内容,给一个元素添加了进入强调退出的动画, ...

  6. EPAI手绘建模APP常用工具栏_1

    1.常用工具栏 图 1 常用工具栏 (1) 撤销 (2) 重做 (3) 删除 (4) 复制 ① 选中场景中的模型后,复制按钮变成可用状态,否则变成禁用状态.可以选择多个模型一起复制. (5) 变换 图 ...

  7. 如何通过前后端交互的方式制作Excel报表

    前言 Excel拥有在办公领域最广泛的受众群体,以其强大的数据处理和可视化功能,成了无可替代的工具.它不仅可以呈现数据清晰明了,还能进行数据分析.图表制作和数据透视等操作,为用户提供了全面的数据展示和 ...

  8. appium测试混合应用

    最近用appium测试公司APP,APP是原生+H5的模式,测试过程中发现大部分H5的页面使用原生的方式可以进行操作,只有少部分H5页面的按钮虽然在uiautomatorviewer的界面能解析出来, ...

  9. golang计时器

    timer 计时器 用于在指定的Duration类型时间后调用函数或计算表达式. 如果只是想指定时间之后执行,使用time.Sleep() 使用NewTimer(),可以返回的Timer类型在计时器到 ...

  10. tomcat(2)- tomcat目录结果和配置文件

    目录 1 Tomcat目录结构 2 Tomcat的配置文件 2.1 server.xml配置文件 2.2 server.xml配置文件结构 2.3 WEB应用自动部署 2.4 配置文件各个组件的关联 ...