SSL证书制作及nginx部署

SSL证书制作及nginx中部署

本文主要介绍了SSL证书的制作及如何将证书部署在nginx中,并简要说明在制作及部署过程中可能遇到的问题。

SSL证书制作

  1. 推荐在Linux环境上制作SSL证书,本文使用的是CentOS。

  2. 安装openssl:

    #更新系统中的软件包,以确保你安装的是最新的版本
    sudo yum update#安装 OpenSSL
    sudo yum install openssl#查看版本信息,确认安装成功
    openssl version
    
  3. 接下来是制作SSL证书

    生成 SSL 证书的步骤

    # 生成私钥 (Private Key)
    openssl genpkey -algorithm RSA -out private.key -aes256
    
    • private.key 是生成的私钥文件。
    • -aes256 参数表示使用 AES 256 加密私钥文件。

    # 生成证书签名请求 (CSR - Certificate Signing Request)
    openssl req -new -key private.key -out certificate.csr
    
    • certificate.csr 是生成的 CSR 文件。

    • 在执行此命令时,系统会提示输入一些信息,如国家代码、州、省、市、组织名、单位名、域名 (Common Name),以及邮箱地址。这些信息将包含在证书中。

    # 生成自签名证书 (Self-signed Certificate)
    openssl x509 -req -days 365 -in certificate.csr -signkey private.key -out certificate.crt
    
    • certificate.crt 是生成的自签名证书文件。

    • -days 365 参数表示证书的有效期为 365 天,可以根据需要调整。

    # 合并私钥和证书到一个文件 (按需)
    cat private.key certificate.crt > combined.pem
    

    生成过程中可能用到的命令选项

    • -newkey rsa:2048:生成一个新的 RSA 密钥对,密钥长度为 2048 位。
    • -nodes:如果不想加密私钥文件,可以添加此参数。
    • -sha256:使用 SHA-256 算法生成 CSR。

    验证生成的证书

    可以使用以下命令验证生成的证书:

    bash复制代码# 查看证书内容
    openssl x509 -in certificate.crt -text -noout# 查看私钥内容
    openssl rsa -in private.key -check# 查看 CSR 内容
    openssl req -text -noout -verify -in certificate.csr
    

    生成的各文件的作用

    1. .key 文件 (私钥文件):
      • 作用: 这是一个私钥文件,包含了生成 SSL 证书的私钥。私钥应当保密,不应泄露。
      • 位置: 服务器上安全的地方,例如 /etc/nginx/ssl/private.key
      • 用途: 私钥用于解密 SSL/TLS 会话。
    2. .csr 文件 (证书签名请求文件):
      • 作用: 这是一个证书签名请求文件,包含公钥以及组织信息。这是提交给证书颁发机构 (CA) 的文件,用于申请 SSL 证书。
      • 位置: 用于申请证书过程中,申请完后可以保留以备未来使用。
      • 用途: 用于向 CA 提交申请以获得 SSL 证书。
    3. .crt 文件 (证书文件):
      • 作用: 这是由 CA 签发的公钥证书文件,包含了你的公钥以及 CA 的签名。
      • 位置: 服务器上配置到 Nginx 或其他服务的地方,例如 /etc/nginx/ssl/certificate.crt
      • 用途: 这是公开的证书,用于客户端验证服务器的真实性。
    4. .pem 文件 (合成文件):
      • 作用: PEM 文件通常是包含私钥和公钥证书的合成文件,方便一些软件和服务读取所有需要的信息。
      • 位置: 服务器上需要读取私钥和公钥证书的地方,例如 /etc/nginx/ssl/combined.pem
      • 用途: 提供了私钥和证书的综合访问,可以用于许多支持 PEM 格式的服务。
  4. 上述生成的SSL证书在部署在nginx后,在启动nginx时可能会报错:

    cannot load certificate key "C:\AnGongYuan\nginx-1.23.0/conf/private.key": PEM_read_bio_PrivateKey() failed (SSL: error:2807106B:UI routines:UI_process:processing error:while reading strings error:0906406D:PEM routines:PEM_def_callback:problems getting password error:0907B068:PEM routines:PEM_read_bio_PrivateKey:bad password read)
    

    这个错误消息表明,Nginx 在尝试读取你的私钥文件时遇到了问题,具体来说是因为私钥文件受密码保护而 Nginx 无法正确处理密码。

    解决方案是: 生成不受密码保护的私钥文件,配置到nginx中

    openssl rsa -in private.key -out private_no_passphrase.key
    
  5. 综合上述过程,可以将整个过程整合到shell脚本中,如下:

    #!/bin/bash# 用户输入的信息(根据需要修改)
    COUNTRY="CN"
    STATE="Beijing"
    LOCALITY="Beijing"
    ORGANIZATION="MyCompany"
    ORG_UNIT="IT"
    COMMON_NAME="192.168.1.1"  # 可以是域名或IP地址
    EMAIL="admin@example.com"
    DAYS=365  # 证书有效期# 生成私钥
    openssl genpkey -algorithm RSA -out private.key -aes256# 生成证书签名请求 (CSR)
    openssl req -new -key private.key -out certificate.csr -subj "/C=$COUNTRY/ST=$STATE/L=$LOCALITY/O=$ORGANIZATION/OU=$ORG_UNIT/CN=$COMMON_NAME/emailAddress=$EMAIL"# 生成自签名证书
    openssl x509 -req -days $DAYS -in certificate.csr -signkey private.key -out certificate.crt# 生成不带密码保护的私钥
    openssl rsa -in private.key -out private_no_passphrase.key# 验证生成的证书
    echo "验证证书内容:"
    openssl x509 -in certificate.crt -text -nooutecho "验证私钥内容:"
    openssl rsa -in private.key -checkecho "验证CSR内容:"
    openssl req -text -noout -verify -in certificate.csrecho "SSL 证书生成完毕!"

    使用上述脚本生成SSL证书过程中,会出现若干次让输入密码的情况,根据自己需要进行输入,也可以使用下面调整后的脚本,将密码提前存入脚本中

    #!/bin/bash# 用户输入的信息(根据需要修改)
    COUNTRY="CN"
    STATE="Beijing"
    LOCALITY="Beijing"
    ORGANIZATION="MyCompany"
    ORG_UNIT="IT"
    COMMON_NAME="192.168.1.1"  # 可以是域名或IP地址
    EMAIL="admin@example.com"
    DAYS=365  # 证书有效期
    PASSPHRASE="your_secure_password"  # 私钥密码# 生成加密的私钥
    openssl genpkey -algorithm RSA -out private.key -aes256 -pass pass:$PASSPHRASE# 生成证书签名请求 (CSR)
    openssl req -new -key private.key -out certificate.csr -passin pass:$PASSPHRASE -subj "/C=$COUNTRY/ST=$STATE/L=$LOCALITY/O=$ORGANIZATION/OU=$ORG_UNIT/CN=$COMMON_NAME/emailAddress=$EMAIL"# 生成自签名证书
    openssl x509 -req -days $DAYS -in certificate.csr -signkey private.key -passin pass:$PASSPHRASE -out certificate.crt# 生成不带密码保护的私钥
    openssl rsa -in private.key -passin pass:$PASSPHRASE -out private_no_passphrase.key# 验证生成的证书
    echo "验证证书内容:"
    openssl x509 -in certificate.crt -text -nooutecho "验证私钥内容:"
    openssl rsa -in private_no_passphrase.key -checkecho "验证CSR内容:"
    openssl req -text -noout -verify -in certificate.csrecho "SSL 证书生成完毕!"

nginx中部署SSL证书

下面是在nginx中部署上面生成的证书,给出的是nginx.conf的部分配置,此配置支持从http的80端口跳转到https的443端口:

# HTTPS serverserver {listen 443 ssl;server_name 192.168.14.17;ssl_certificate certificate.crt;ssl_certificate_key private_no_passphrase.key;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';ssl_prefer_server_ciphers on;ssl_stapling on;ssl_stapling_verify on;resolver 8.8.8.8 8.8.4.4 valid=300s;resolver_timeout 5s;add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" always;add_header X-Frame-Options DENY;add_header X-Content-Type-Options nosniff;add_header X-XSS-Protection "1; mode=block";add_header Referrer-Policy no-referrer-when-downgrade;# Proxy pass for other requestslocation / {proxy_pass http://127.0.0.1:13000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}server {listen 80;server_name 192.168.14.17;location / {return 301 https://$host$request_uri;}}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VUE3.0-条件渲染

在Vue 中&#xff0c;提供了条件渲染&#xff0c;这类似于 JavaSeript 中的条件语句 V-if V-else V-else-if V-show v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回真值时才被渲染 <template><h3>条件渲染</h3><div v-if"fla…

SDUT 链表9-------7-9 sdut-C语言实验-约瑟夫问题

7-9 sdut-C语言实验-约瑟夫问题 分数 20 全屏浏览 切换布局 作者 马新娟 单位 山东理工大学 n个人想玩残酷的死亡游戏&#xff0c;游戏规则如下&#xff1a; n个人进行编号&#xff0c;分别从1到n&#xff0c;排成一个圈&#xff0c;顺时针从1开始数到m&#xff0c;数到m的…

【Linux取经路】进程通信——共享内存

文章目录 一、直接原理1.1 共享内存的的申请1.2 共享内存的释放 二、代码演示2.1 shmget2.1.1 详谈key——ftok 2.2 创建共享内存样例代码2.3 获取共享内存——进一步封装2.4 共享内存挂接——shmat2.5 共享内存去关联——shmdt2.6 释放共享内存——shmctl2.7 开始通信2.7.1 pr…

Git学习和使用指南详细篇

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

第十五节:带你梳理Vue2:computed/methods/watch之间的区别

1. 计算属性computed与方法methods的比较 通过学习的知识,我们已经了解了computed计算属性和methods方法, 计算属性computed和methods方法都可以将一段逻辑代码进行复用,那么他们有什么不同之处呢. 我们先看一个示例: <div id"app"> <h2>对于字符串数…

真香!Github上的这个项目,可以帮你节省打印费。

众所周知&#xff0c;我们在打印文档时&#xff0c;往往在选择黑白还是彩色打印上纠结。 全彩的文档也还好&#xff0c;最害怕的就是那种只有一部分是彩色页面&#xff0c;其他都是黑白页面的文档。 遇到这种文档&#xff0c;打印店老板好心的话会帮你分开。如果黑心一点的话…

Javaweb 中过滤器(Filter)的使用

在 Java Web 开发中&#xff0c;过滤器&#xff08;Filter&#xff09;是一种用于拦截和处理请求和响应的组件。它们在 Servlet 请求到达目标 Servlet 之前&#xff0c;或者在响应发送给客户端之前&#xff0c;对请求和响应进行预处理或后处理。过滤器在许多场景中都非常有用&a…

深入了解 RabbitMQ:构建可靠消息传递系统的关键

前言 在现代分布式应用程序开发中&#xff0c;构建可靠的消息传递系统至关重要。RabbitMQ 作为一款强大的消息代理软件&#xff0c;为开发人员提供了丰富的工具和解决方案。本文将深入探讨 RabbitMQ 的核心概念、工作原理以及其在实际应用中的应用场景。 一、什么是 RabbitMQ…

Dockerfile在jdk8基础镜像上,制作ffmpeg镜像

基础镜像,也可以改成自己的 xyjdk8:0.1 #FROM openjdk:8-jre-alpine FROM xyjdk8:0.1 MAINTAINER XiaoYe# 设置仓库&#xff0c; 因为基础镜像已经设置了&#xff0c;这里注释 #RUN echo "http://mirrors.aliyun.com/alpine/v3.10/main" > /etc/apk/repositories…

java版CRM客户关系管理系统crm 客户关系管理系统-简单高效管理客户

我司的CRM客户关系管理系统是一款功能强大的客户关系管理软件&#xff0c;旨在帮助企业更有效地管理客户关系&#xff0c;提高销售效率和客户满意度。该系统涵盖了多个功能模块&#xff0c;包括待办事项、线索管理、客户管理、联系人管理、客户公海、商机管理、合同管理、回款管…

Cent OS 7 64位 安装Docker教程

[root@localhost ~]# mkdir -p /home/envsafe/data/docker [root@localhost ~]# work_dir="/home/envsafe/data/docker" [root@localhost ~]# yum remove -y docker 已加载插件:fastestmirror, langpacks 参数 docker 没有匹配 不删除任何软件包 [root@localhost ~]…

Linux中使用CMake导入第三方开发库

Linux中使用CMake导入第三方开发库 背景 一般CMake中导入第三方库主要使用如下三个方法&#xff1a; find_package 主要使用场景是第三方库提供了CMake文件或是CMake官方适配了部分流行的开发库。FindPkgConfig 主要使用场景是第三方库没有提供CMake文件&#xff0c;但是提供…

Leetcode刷题笔记3:链表基础1

导语 leetcode刷题笔记记录&#xff0c;本篇博客记录链表基础1部分的题目&#xff0c;主要题目包括&#xff1a; 203.移除链表元素707.设计链表206.反转链表 知识点 链表 链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据…

HQL面试题练习 —— 取出累计值与1000差值最小的记录

题目来源&#xff1a;滴滴 目录 1 题目2 建表语句3 题解 1 题目 已知有表 t_cost_detail 包含 id 和 money 两列&#xff0c;id 为自增&#xff0c;请累加计算money 值&#xff0c;并求出累加值与 1000 差值最小的记录。 ------------- | id | money | ------------- | 1 …

LLM中的few-shot是什么意思

我上篇博客写了我做的测试Baichuan2-13B模型的一些工作&#xff0c;测试过程免不了要修改代码&#xff0c;在代码中接触了下所谓的few-shot。 比如&#xff0c;所谓2-shot&#xff0c;就是在提示词里提供两个问题和答案&#xff0c;让大模型以为自己回答过问题&#xff0c;后面…

vscode插件-03 PHP

PHP Intelephense 如果php在远程计算机上&#xff0c;要把插件安装在远程&#xff0c;而不是本地。 这个插件&#xff0c;要求php版本大于7&#xff0c;且设置环境变量&#xff08;好像不一定要设置&#xff09;。 设置里面搜索php.executablePath&#xff0c;打开setting.js…

vue-router路由懒加载以及三种实现方式

什么是路由懒加载&#xff1f; 延迟加载或按需加载路由所对应的组件&#xff0c;而不是在应用初始化时就一次性加载所有组件。 路由懒加载做了什么事情&#xff1f; 主要作用是将路由对应的组件打包成一个个的js代码块 只有在这个路由被访问到的时候&#xff0c;才加载对应…

Windows系统安装OpenSSH使用VScode远程连接内网Linux服务器开发

文章目录 &#x1f4a1;推荐 前言1、安装OpenSSH2、VS Code配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网…

【详细讲解】二叉树的层序遍历

广度优先搜索 总结一下&#xff0c;思路就是&#xff1a; 加入元素&#xff0c;记录size&#xff0c;size就是当前这一层的元素个数。不断弹出元素&#xff0c;size - 1&#xff0c; 同时加入弹出元素的左右孩子&#xff0c;直到size0&#xff0c;说明当前层已经完全遍历完&am…

解决vue版本不一致导致不能正常编译

解决vue版本不一致导致不能正常编译 异常现象分析原因解决方案 异常现象 项目原本运行无异常&#xff0c;但安装了一个el-table-infinite-scroll的插件后&#xff0c;编译报错&#xff0c;截图如下 分析原因 vue版本与compile版本不一致&#xff0c;应该统一起来&#xff0…