Linux生成自签证书【Nginx】

👨‍🎓博主简介

  🏅CSDN博客专家
  🏅云计算领域优质创作者
  🏅华为云开发者社区专家博主
  🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗


文章目录

    • 1. 安装 OpenSSL
    • 2. 生成私钥
    • 3. 生成证书签名请求 (CSR)
    • 4. 生成自签证书
    • 5. 验证证书
    • 6. 移除私钥密码(可选)
    • 7. 使用证书
    • 8. 页面访问展示
    • 9. 总结

1. 安装 OpenSSL

首先检查是否安装了Openssl,在服务器执行:

openssl version

如果没有就是系统未安装 OpenSSL,可以通过以下命令安装:

  • Debian/Ubuntu操作系统:
sudo apt-get install openssl -y 
  • CentOS/RHEL操作系统:
sudo yum install openssl -y 

2. 生成私钥

使用以下命令生成一个 2048 位的 RSA 私钥:

私钥名称可自己定义,一般是以域名为命名。private.key

openssl genpkey -algorithm RSA -out private.key -aes256

系统会提示设置私钥的密码。

3. 生成证书签名请求 (CSR)

使用以下命令生成 CSR:

同样,如果私钥名称已修改,这里也需要修改一下,csr名称也可以修改,一般也是以域名为命名。private.keycsr.csr

openssl req -new -key private.key -out csr.csr

系统会提示需要输入私钥的密码,还有提示输入国家、省份、城市、组织等信息。

4. 生成自签证书

使用以下命令生成自签证书:

同样,如果私钥名称、证书签名名称已修改,这里也需要修改一下,crt名称也可以修改,一般也是以域名为命名。private.keycsr.csrcertificate.crt

openssl x509 -req -days 365 -in csr.csr -signkey private.key -out certificate.crt

-days 365 表示证书有效期为 365 天。

会提示输入一下私钥密码;

5. 验证证书

使用以下命令验证证书内容:

openssl x509 -in certificate.crt -text -noout

出现这些代表自签证书已经配置成功,生成完共有三个文件【crt:自签证书、csr:证书签名信息、key:私钥】。

6. 移除私钥密码(可选)

如果不想每次使用私钥都输入密码,可以移除密码:

openssl rsa -in private.key -out private.key

7. 使用证书

生成的 certificate.crtprivate.key 可用于配置 HTTPS 服务器等场景,一般用于Nginx。

Nginx配置ssl证书如下:

    server {
        listen       443 ssl;
        server_name  域名;

        ssl_certificate      /usr/local/nginx/conf/ssl/certificate.crt; # 或者是pem文件
        ssl_certificate_key  /usr/local/nginx/conf/ssl/private.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

8. 页面访问展示

页面访问会提示不安全的,可以点击高级继续访问

可以查看证书详情:

9. 总结

通过以上步骤,可以在 Linux 系统上生成自签证书。

自签证书仅适用于测试和内部环境,在生产环境中建议使用受信任的证书颁发机构(CA)签发的证书。

自签证书名称也可以在执行完所有的命令之后,mv 重命名证书名称。

  • 命令解析:

  • 生成私钥命令

openssl genpkey -algorithm RSA -out private.key -aes256
  1. openssl

OpenSSL 是一个开源的工具包,用于实现 SSL/TLS 协议以及加密算法。它广泛用于生成密钥、证书、加密数据等操作。

  1. genpkey

这是 OpenSSL 的一个子命令,用于生成私钥(Private Key)。genpkey 是一个通用的私钥生成命令,支持多种加密算法(如 RSA、ECDSA 等)。

  1. -algorithm RSA

指定生成的密钥类型为 RSA(Rivest-Shamir-Adleman)。RSA 是一种非对称加密算法,广泛用于加密通信和数字签名。它基于大整数分解的数学难题,具有较高的安全性。

  1. -out private.key

指定生成的私钥文件保存路径和文件名。这里将私钥保存为 private.key 文件。私钥文件是极其重要的,它用于解密数据或生成数字签名,必须妥善保管,避免泄露。

  1. -aes256

这个选项表示对生成的私钥文件进行加密保护,加密算法使用 AES-256。AES-256 是一种对称加密算法,具有较高的安全性。通过加密私钥文件,可以防止私钥被未经授权的人员直接读取。

  • 当运行这条命令时,OpenSSL 会提示用户输入一个密码(passphrase)。这个密码将用于加密私钥文件。只有输入正确的密码,才能解密并使用私钥。
  • 生成证书签名请求命令
openssl req -new -key private.key -out csr.csr
  1. openssl req

openssl req 是 OpenSSL 的一个子命令,用于生成和处理证书签名请求(CSR)。CSR 是一个文件,其中包含公钥、身份信息(如域名、组织信息等)以及签名信息,用于向证书颁发机构(CA)申请数字证书。

  1. -new

这个选项表示生成一个新的 CSR。它会启动一个交互式流程,提示用户输入证书相关的身份信息。

  1. -key private.key

指定用于生成 CSR 的私钥文件路径。私钥文件 private.key 中包含公钥部分,CSR 中的公钥就是从这个私钥文件中提取的。私钥用于对 CSR 中的内容进行签名,确保 CSR 的完整性和真实性。

  1. -out csr.csr

指定生成的 CSR 文件的保存路径和文件名。CSR 文件将包含公钥和身份信息,并且通过私钥签名。生成的 csr.csr 文件可以提交给证书颁发机构(CA)进行签名,生成最终的数字证书。

执行过程

当运行这条命令时,OpenSSL 会提示用户输入证书相关的身份信息,包括以下内容:

  1. Country Name ©:国家代码,如 CN(中国)、US(美国)。
  2. State or Province Name (ST):省份或州。
  3. Locality Name (L):城市或地区。
  4. Organization Name (O):组织名称。
  5. Organizational Unit Name (OU):组织单位名称(如部门名称)。
  6. Common Name (CN):通用名称,通常是域名(如 www.example.com),对于服务器证书,CN 应该是服务器的域名。
  7. Email Address:联系邮箱地址。
  8. Challenge Password:挑战密码(可选,用于某些特定用途)。
  9. Optional Company Name:可选的公司名称。

这些信息将被包含在 CSR 中,并通过私钥进行签名。生成的 CSR 文件是一个文本文件,通常以 -----BEGIN CERTIFICATE REQUEST----------END CERTIFICATE REQUEST----- 作为开头和结尾。

  • 生成自签证书命令
openssl x509 -req -days 365 -in csr.csr -signkey private.key -out certificate.crt
  1. openssl x509

openssl x509 是 OpenSSL 的一个子命令,用于处理 X.509 证书。它可以用于查看证书内容、验证证书、生成自签名证书等操作。

  1. -req

这个选项表示处理一个证书签名请求(CSR)。它告诉 OpenSSL,输入文件是一个 CSR,而不是其他类型的文件(如证书或私钥)。

  1. -days 365

指定生成的证书的有效期为 365 天。数字证书都有一个有效期,超过有效期后,证书将不再被信任。你可以根据需要调整这个值,例如 -days 730 表示有效期为两年。

  1. -in csr.csr

指定输入的 CSR 文件路径。这个 CSR 文件通常是由前面的 openssl req 命令生成的,包含了公钥和身份信息。

  1. -signkey private.key

指定用于签名的私钥文件路径。这个私钥文件必须与生成 CSR 时使用的私钥相同。自签名证书的签名过程是使用私钥对证书内容进行签名,以证明证书的完整性和真实性。

  1. -out certificate.crt

指定生成的证书文件的保存路径和文件名。生成的证书文件 certificate.crt 是一个 X.509 格式的证书,可以用于 SSL/TLS 服务器或其他需要证书的场景。

  • 验证证书命令
openssl x509 -in certificate.crt -text -noout

这条命令是使用 OpenSSL 工具查看一个 X.509 数字证书的详细内容,而不输出证书本身。以下是命令的详细解析:

  1. openssl x509

openssl x509 是 OpenSSL 的一个子命令,用于处理 X.509 证书。它可以用于查看证书内容、验证证书、生成自签名证书等操作。

  1. -in certificate.crt

指定输入的证书文件路径。这里指定要查看的证书文件为 certificate.crt

  1. -text

这个选项表示以文本形式输出证书的详细内容。它会显示证书中的所有字段和相关信息,包括:

  • 证书版本(Version)
  • 序列号(Serial Number)
  • 签名算法(Signature Algorithm)
  • 颁发者(Issuer)
  • 有效期(Validity)
    • Not Before(生效时间)
    • Not After(过期时间)
  • 主题(Subject)
  • 公钥信息(Subject Public Key Info)
  • 扩展信息(Extensions)(如果有)
  1. -noout

这个选项表示不输出证书本身的内容(即不输出证书的 PEM 格式内容)。通常,如果不使用 -noout,命令会输出证书的 PEM 内容(以 -----BEGIN CERTIFICATE----------END CERTIFICATE----- 为开头和结尾)。使用 -noout 可以避免输出这些内容,只显示证书的详细信息。

  • 移除私钥密码命令
openssl rsa -in private.key -out private.key
  1. openssl rsa

openssl rsa 是 OpenSSL 的一个子命令,专门用于处理 RSA 私钥。它可以用于查看私钥信息、转换私钥格式、解密加密的私钥等操作。

  1. -in private.key

指定输入的私钥文件路径。这里表示从文件 private.key 中读取 RSA 私钥。

  1. -out private.key

指定输出的私钥文件路径。这里表示将处理后的私钥重新写入到文件 private.key 中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/964909.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker基础以及单体实战

Docker 一、Docker1.1 Docker组成1.2 Dcoker运行图1.3 名称空间Namepace 1.4 docker、Docker compose、kubermetes 二、Docker安装2.1 在线Docker安装2.2 使用官方通用安装脚本2.3 二进制安装Docker三、Docker基础命令3.1 启动类3.2 镜像类3.3 容器类3.4 网络类3.5 Docker comp…

MySQL表的CURD

目录 一、Create 1.1单行数据全列插入 1.2多行数据指定列插入 1.3插入否则更新 1.4替换 2.Retrieve 2.1 select列 2.1.1全列查询 2.1.2指定列查询 2.1.3查询字段为表达式 2.1.4为查询结果指定别名 2.1.5结果去重 2.2where条件 2.3结果排序 2.4筛选分页结果 三…

如何优化垃圾回收机制?

垃圾回收机制 掌握 GC 算法之前,我们需要先弄清楚 3 个问题。第一,回收发生在哪里?第二,对象在 什么时候可以被回收?第三,如何回收这些对象? 回收发生在哪里? JVM 的内存区域中&…

基于SpringBoot的体检预约管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

PostgreSQL / PostGIS:创建地理要素

PostGIS详细教程可以参考官方文档:https://postgis.net/workshops/zh_Hans/postgis-intro/,并且官方文档提供了练习数据、教程、PPT版本教程。我这里参考QGIS文档中关于PostGIS的教程进行学习。 PostGIS 可以被认为是一组数据库内函数的集合&#xff0c…

embeddingbag词袋

文章目录 1. embeddingbag2. pytorch 1. embeddingbag 词袋embeddingbag 是在embedding词表的基础上演变起来的,nn.embedding的作用是构建一个词表,通过输入index序号来索引词对应的词向量,是可以根据词索引index进行forward计算的,embeddin…

分享|通过Self-Instruct框架将语言模型与自生成指令对齐

结论 在大型 “指令调整” 语言模型依赖的人类编写指令数据存在数量、多样性和创造性局限, 从而阻碍模型通用性的背景下, Self - Instruct 框架, 通过 自动生成 并 筛选指令数据 微调预训练语言模型, 有效提升了其指令遵循能…

无穿戴动捕数字人互动方案 展馆展览创新引擎,推动文旅数字化转型

随着经济社会的发展和文旅融合的加速推进,“博物馆热”已成为一种不可忽视的社会现象,成为文化领域最具潜力的增长点之一。在信息技术的迅猛推动下,科技赋能的博物馆展览日益受到公众的关注,其中,“元宇宙”等创新概念…

5.6 Mybatis代码生成器Mybatis Generator (MBG)实战详解

文章目录 前言一、Mybatis Generator简介二、Maven插件运行方式三、生成配置 generatorConfig.xml MyBatis3Simple风格MyBatis3风格MyBatis3DynamicSql风格 四、Java代码运行方式五、MGB生成全部表六、增加Ext包七、Git提交总结 前言 本文我们主要实战Mybatis官方的代码生成器…

C++六大默认成员函数

C六大默认成员函数 默认构造函数默认析构函数RAII技术RAII的核心思想优点示例应用场景 默认拷贝构造深拷贝和浅拷贝 默认拷贝赋值运算符移动构造函数(C11起)默认移动赋值运算符(C11起)取地址及const取地址操作符重载取地址操作符重…

Ext文件系统

文件内容属性 被打开的文件在内存中,没有被打开的文件在磁盘里文件系统的工作就是根据路径帮我们找到在磁盘上的文件 磁盘(硬件) 磁盘的存储结构 磁头在传动臂的运动下共同进退,向磁盘写入的时候是向柱面批量写入的 OS文件系统访…

AURIX TC275学习笔记3 官方例程 (UART LED WDT)

文章目录 参考资料1. ASCLIN_UART_12. GPIO_LED_Button_13. WDT (Watch Dog Timer) 参考资料 AURIX TC275学习笔记1 资料收集Getting Started with AURIX™ Development Studio 官方帮助文档happy hacking for TC275! 硬件平台使用AURIX™ TC275 Lite 套件,按照参…

免费接入DeepSeek等多种大模型

核心代码 import cn.hutool.core.collection.CollUtil; import com.tool4j.pasteshare.entity.params.AiParams; import com.tool4j.pasteshare.entity.params.Message; import com.tool4j.pasteshare.service.AiCompletionService; import com.tool4j.pasteshare.util.deepse…

PostIn简明安装教程(入门级)

PostIn是一款开源免费的接口管理工具,包含接口调试、接口文档设计、数据MOCK等模块,本文将介绍如何快速安装配置,以快速入门上手。 1、服务端安装 私有部署版本支持多种操作系统,包括 Linux、Docker、Windows及macOS,…

java Fx进阶操作

1.java Fx基本介绍 JavaFX是用于构建富互联网应用程序的Java库。 使用此库编写的应用程序可以跨多个平台一致运行。 使用JavaFX开发的应用程序可以在各种设备上运行,如台式计算机,手机,电视,平板电脑等。 要使用Java编程语言开…

java-重载与重写

介绍 在 Java 中,重载(Overloading) 和 重写(Overriding) 是两个重要的概念,它们都与方法有关,但它们的应用场景和行为完全不同。 通过理解重载和重写的区别,可以更好地设计类的继承…

数据库系统概念第六版记录 一

1.关系型数据库 关系型数据库(Relational Database,简称 RDB)是基于关系模型的一种数据库,它通过表格的形式来组织和存储数据。每个表由若干行(记录)和列(字段)组成,数据…

嵌入式工程师必学(143):模拟信号链基础

概述: 我们每天使用的许多电子设备,以及我们赖以生存的电子设备,如果不使用电子工程师设计的实际输入信号,就无法运行。 模拟信号链由四个主要元件组成:传感器、放大器、滤波器和模数转换器 (ADC)。这些传感器用于检测、调节模拟信号并将其转换为适合由微控制器或其他数…

2.5学习

misc buuctf-假如给我三天光明 下载附件后得到了一个压缩包和一个图片,压缩包为加密压缩包,需要解出密码,然后注意到这个图片并非简单的一个封面,在下方还有诸多点,有黑有灰。经过搜索,发现这是盲文通过与…

嵌入式八股文面试题(一)C语言部分

1. 变量/函数的声明和定义的区别? (1)变量 定义不仅告知编译器变量的类型和名字,还会分配内存空间。 int x 10; // 定义并初始化x int x; //同样是定义 声明只是告诉编译器变量的名字和类型,但并不为它分配内存空间…