基于 OpenSSL 生成自签名证书

PKI、CA、SSL、TLS、OpenSSL几个概念

PKI 和 CA

PKI 就是 Public Key Infrastructure 的缩写,翻译过来就是公开密钥基础设施。它是利用公开密钥技术所构建的,解决网络安全问题的,普遍适用的一种基础设施。

PKI 是目前唯一的能够基本全面解决安全问题的可能的方案。 PKI 通过电子证书以及管理这些电子证书的一整套设施,维持网络世界的秩序;通过提供一系列的安全服务,为网络电子商务、电子政务提供有力的安全保障。

通俗点说 PKI 就是一整套安全相关标准,然后基于这套标准体系衍生一系列安全相关的产品,主要目的是保证数据在网络上安全、可靠地传输。

PKI 主要由以下组件组成:

  • 认证中心 CA(证书签发) ;
  • X.500目录服务器(证书保存) ;
  • 具有高强度密码算法(SSL)的安全WWW服务器(即配置了 HTTPS 的 apache) ;
  • Web(安全通信平台): Web 有 Web Client 端和 Web Server 端两部分
  • 自开发安全应用系统 自开发安全应用系统是指各行业自开发的各种具体应用系统,例如银行、证券的应用系统等。

CA 是 PKI 的"核心",即数字证书的申请及签发机关,CA 必须具备权威性的特征,它负责管理 PKI 结构下的所有用户(包括各种应用程序)的证书,把用户的公钥和用户的其他信息捆绑在一起,在网上验证用户的身份,CA 还要负责用户证书的黑名单登记和黑名单发布 。

CA 实现了 PKI 中一些很重要的功能:

  • 接收验证最终用户数字证书的申请;
  • 确定是否接受最终用户数字证书的申请-证书的审批;
  • 向申请者颁发、拒绝颁发数字证书-证书的发放;
  • 接收、处理最终用户的数字证书更新请求-证书的更新;
  • 接收最终用户数字证书的查询、撤销;
  • 产生和发布证书废止列表(CRL);
  • 数字证书的归档;
  • 密钥归档;
  • 历史数据归档;

在这么多功能中,CA 的核心功能就是"发放"和"管理"数字证书:

SSL 和 TLS

SSL 和 TLS 协议是介于 HTTP 协议与 TCP 之间的一个可选层,主要用于 Web 客户端和服务器之间进行数据的安全传输:

  • SSL: Secure Socket Layer,安全套接字层),为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取。当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:
    SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
    SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
  • TLS: (Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。
    TLS 1.0是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本,可以理解为SSL 3.1,它是写入了 RFC 的。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。

SSL/TLS协议提供的服务主要有:

  • 认证用户和服务器,确保数据发送到正确的客户机和服务器;
  • 加密数据以防止数据中途被窃取;
  • 维护数据的完整性,确保数据在传输过程中不被改变;

OpenSSL


OpenSSL 是一个开源的加密工具包,主要包括如下三部分:

  • libssl (with platform specific naming):
    Provides the client and server-side implementations for SSLv3 and TLS.
  • libcrypto (with platform specific naming):
    Provides general cryptographic and X.509 support needed by SSL/TLS but
    not logically part of it.
  • openssl:
    A command line tool that can be used for:
    Creation of key parameters
    Creation of X.509 certificates, CSRs and CRLs
    Calculation of message digests
    Encryption and decryption
    SSL/TLS client and server tests
    Handling of S/MIME signed or encrypted mail
    And more…

使用 OpenSSL 生产自签名 SSL 证书过程


以下为 Centos7 环境下生成自签名 SSL 证书的具体过程:

  1. 修改 openssl 配置文件
vi /etc/pki/tls/openssl.cnf
# match 表示后续生成的子证书的对应项必须和创建根证书时填的值一样,否则报错。以下配置只规定子证书的 countryName 必须和根证书一致。
[ policy_match ] 段配置改成如下:
countryName             = match
stateOrProvinceName     = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional
  1. 在服务器 pki 的 CA 目录下新建两个文件
cd /etc/pki/CA && touch index.txt serial && echo 01 > serial
  1. 生成 CA 根证书密钥
cd /etc/pki/CA/ && openssl genrsa -out private/cakey.pem 2048 && chmod 400 private/cakey.pem
  1. 生成根证书(根据提示输入信息,除了 Country Name 选项需要记住的,后面的随便填)
openssl req -new -x509 -key private/cakey.pem -out cacert.pem
  1. 生成密钥文件
openssl genrsa -out nginx.key 2048
  1. 生成证书请求文件(CSR):
    A. 根据提示输入信息,除了 Country Name 与前面根证书一致外,其他随便填写
    B. Common Name 填写要保护的域名,比如:*.qhh.me
openssl req -new -key nginx.key -out nginx.csr
  1. 使用 openssl 签署 CSR 请求,生成证书
openssl ca -in nginx.csr -cert /etc/pki/CA/cacert.pem -keyfile /etc/pki/CA/private/cakey.pem -days 365 -out nginx.crt参数项说明:
-in: CSR 请求文件
-cert: 用于签发的根 CA 证书
-keyfile: 根 CA 的私钥文件
-days: 生成的证书的有效天数
-out: 生成证书的文件名

至此自签名证书生成完成,最终需要:nginx.key 和 nginx.crt

配置 Nginx 使用自签名证书

server {listen  80;server_name     domain;return  301     https://$host$request_uri;
}
server {listen  443 ssl;ssl_certificate       ssl/nginx.crt; # 前面生成的 crt 证书文件ssl_certificate_key   ssl/nginx.key; # 前面生成的证书私钥server_name     domain;location / {root /var/www-html;index  index.html;}
}

相关资料

http://seanlook.com/2015/01/18/openssl-self-sign-ca/ | 基于 OpenSSL 自签署证书
http://www.cnblogs.com/littlehann/p/3738141.html | openSSL命令、PKI、CA、SSL证书原理
https://cnzhx.net/blog/ssl-on-lamp-on-vps/
http://seanlook.com/2015/01/15/openssl-certificate-encryption/ | OpenSSL 与 SSL 数字证书概念贴
https://kb.cnblogs.com/page/194742/ | 数字证书及 CA 的扫盲
http://netsecurity.51cto.com/art/200602/21066.htm | PKI/CA 技术的介绍
http://cnzhx.net/blog/self-signed-certificate-as-trusted-root-ca-in-windows/ | 浏览器添加自签名证书
https://aotu.io/notes/2016/08/16/nginx-https/index.html | Nginx 配置 HTTPS 服务器

基于 OpenSSL 生成自签名证书相关推荐

  1. 基于 OpenSSL 生成自签名证书,数字签名,泛域名证书,ca证书,PKI等

    基于 OpenSSL 生成自签名证书_qhh0205-CSDN博客_openssl自签名证书 windows 下 nginx 双向认证自签名证书配置 windows 下 nginx 双向认证自签名证书 ...

  2. Openssl生成自签名证书并导入浏览器脚本

    Openssl生成自签名证书并导入浏览器 使用说明 1. 准备工作 2. 脚本 3. 导入浏览器 4. 使用证书 使用说明 环境:Centos 7 运行脚本后可以生成根证书.自签名证书(可以指定域名或 ...

  3. 使用OpenSSL生成自签名证书和格式转换

    OpenSSL安装:https://blog.csdn.net/qq_44734154/article/details/125995475 一.生成证书私钥 genrsa 介绍:https://www ...

  4. openssl生成自签名证书

    2019独角兽企业重金招聘Python工程师标准>>> 生成CA证书,自己做CA openssl req -new -x509 -keyout ca.key -out ca.crt ...

  5. Openssl 生成自签名证书

    最近在调试Ingress需要使用多份证书,对证书的生成和使用做了简单的整理. 不用翻垃圾桶一条过 #!/bin/sh output_dir="/opt/suops/k8s/ingress-f ...

  6. 生成自签名证书:生成证书和秘钥

    生成证书和秘钥 简单生成的方法: 1.mkdir  /certs 2.cd  /certs 3.生成自签名证书 sudo openssl req -newkey rsa:2048 -new -node ...

  7. Ubuntu18.04 使用 openssl制作自签名证书

    执行"openssl verison",判断系统是否已安装openssl,若没有安装,请使用apt安装openssl. 一.图解自签名过程 二.关于 CRT PEM KEY CST ...

  8. CentOS生成自签名证书配置Apache https

    CentOS生成自签名证书配置Apache https apache的安装就不用说了 1.安装完apache之后,安装mod_ssl和openssl yum install mod_ssl opens ...

  9. 生成自签名证书步骤(一)

    ## 1. 方式一 1. 创建一个目录如Mytest, 进入该目录, 在该目录下打开命令行窗口 2. 启动openssl ```shell openssl    # 执行该命令即可 ``` 3. 使用 ...

  10. 生成服务器证书 启用HTTPS 生成自签名证书

    HTTPS的传输过程需要使用公私钥对收发数据进行加密,为了防止中间人攻击,需要在服务器端配置证书,通常,证书由可信的CA(Certificate Authority,数字证书认证中心)机构颁发,但是需 ...

最新文章

  1. Pairs Forming LCM LightOJ - 1236[数论+组合计数]
  2. 以后要把flex用起来
  3. 参加微软新技术预览大会
  4. 通过虚方法实现方法重写-多态
  5. openssl创建CA并签发证书
  6. mysql设置空值显示null_mysql的空值与NULL的区别
  7. php mysql复杂查询_PHP MySQL如何做更复杂的查询
  8. 如何使用Ghost备份与还原操作系统
  9. word添加目录和更新
  10. 轻触开关式三功能手电筒3-5W驱动芯片AH3301
  11. 金星DEM数据介绍与下载教程
  12. python爬虫——爬取豆瓣top250电影信息
  13. An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.
  14. 【JavaScript】DOM 操作元素样式和元素类名
  15. 计算机科学家手抄报图片,关于简洁又漂亮的科学手抄报图片
  16. 基于Qt的笛卡尔心形表白程序
  17. Matlab最实用画图命令整理(包括Print输出SCI论文高清大图!)
  18. 科学计算机如何进行复数运算,教你如何用你的卡西欧学生计算器进行复数运算!...
  19. IO(BIO),NIO,AIO的深度解析和区别
  20. 怎么快速搜索linux的日志,如何快速查看Linux日志?

热门文章

  1. English--consonant_摩擦音
  2. AcWing 1402. 星空之夜(Flood Fill/哈希/DFS)
  3. IP地址与MAC地址的区别与特点
  4. PID控制的现象与本质
  5. 自己制作机器学习训练和测试使用的二进制数据集(C++)
  6. 第八届山东省ACM大学生程序设计竞赛总结
  7. 中国私有云发展调查报告(2018年)
  8. Visual Studio无法定位于动态链接库
  9. 聚集索引,非聚集索引,覆盖索引 原理
  10. 计算机内存条如何区分频率,什么是内存条的频率? 怎么看内存条频率?