热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux下如何颁发证书:学习使用OpenSSL搭建一个CA

学习了OpenSSL在Linux中的使用,OpenSSL是一款开源的加密工具,在Linux环境下,我们能够利用它来搭建一个CA来实现证书的发放,可以用于企业内部使用的加密工具。在介绍OpenSSL之前,首先描述一下关于“身份认证+数据加密”的实现方法原理。如何实现“身份验
学习了OpenSSL在Linux中的使用,OpenSSL是一款开源的加密工具,在Linux环境下,我们能够利用它来搭建一个CA来实现证书的发放,可以用于企业内部使用的加密工具。在介绍OpenSSL之前,首先描述一下关于“身份认证+数据加密”的实现方法原理。


如何实现“身份验证+数据加密”,请看下面的一张流程图(自己画得,比较简陋)

整个加密过程:

发送方: 计算数据特征值----> 使用私钥加密特征值 ---> 随机生成密码对称加密整个数据 ---> 使用接受方公钥加密密码
接收方: 使用私钥解密密码 ----> 解密整个数据 ----> 使用公钥验证身份 ----> 比较数据特征值

但是存在一个问题,谁来管理公钥,任何在互联网上传播的数据都不安全,更不用说传递公钥,它如果被篡改,那就无法验证身份,所以不可能由用户自己颁发公钥。

这个时候需要有一个具有公信力的中间机构来做这份工作,那就是CA,由此引发了两个概念:

CA : 证书颁发机构

PKI : 公钥基础设施,公钥基础构架

证书: 里面存放了用户的各种信息,最核心的部分就是公钥

但是还有一个问题,谁来给CA颁发公钥,解决方法是,CA自己给自己颁发公钥。。。


下面是用OpenSSL这个强大的工具,在Linux下构建一个CA,来实现证书管理,我们用一个web服务器端作为需要证书的客户端

1.首先我们来给CA生成一个私钥

切换到/etc/pki/CA/目录,使用openssl命令给自己生成一个私钥

  1. [root@www.linuxidc.com openssl]# cd /etc/pki/CA/  
  2. [root@www.linuxidc.com CA]# ls  
  3. private  
  4. [root@www.linuxidc.com CA]# (umak 66;openssl genrsa 2046 > private/cakey.pem)  
  5. -bash: umak: command not found  
  6. Generating RSA private key, 2046 bit long modulus  
  7. .............................+++  
  8. ..+++  
  9. e is 65537 (0x10001)  

2. CA需要一个自签证书,所以我们给它使用openssl命令生成一个自签证书

  1. [root@www.linuxidc.com CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem  
  2. You are about to be asked to enter information that will be incorporated  
  3. into your certificate request.  
  4. What you are about to enter is what is called a Distinguished Name or a DN.  
  5. There are quite a few fields but you can leave some blank  
  6. For some fields there will be a default value,  
  7. If you enter '.', the field will be left blank.  
  8. -----  
  9. Country Name (2 letter code) [GB]:CN                                                           # 输入你的各项信息,国家 , 省或州,地区,公司,单位,域名,邮箱地址  
  10. State or Province Name (full name) [Berkshire]:Henan     
  11. Locality Name (eg, city) [Newbury]:Zhengzhou  
  12. Organization Name (eg, company) [My Company Ltd]:LINUX  
  13. Organizational Unit Name (eg, section) []:Tech  
  14. Common Name (eg, your name or your server's hostname) []:www.rhce.com   #需要注意的是,这个域名是FQDN(完全限定域名)  
  15. Email Address []:ca@rhce.com  
  16. [root@www.linuxidc.com CA]# ls  
  17. cacert.pem  private  

3.编辑CA配置文件,它位于etc/pki/tls/openssl.cnf,它的作用是指定你的CA所在目录,更改默认属性值

  1. [root@www.linuxidc.com CA]# vim /etc/pki/tls/openssl.cnf  
  2. [ CA_default ]  
  3.   
  4. dir             = http://www.linuxidc.com/CA              # Where everything is kept      **************CA路径 ,修改为绝对路径  
  5. certs           = $dir/certs            # Where the issued certs are kept          ×××××××发给其他的人的证书  ,该目录需要手动创建  
  6. crl_dir         = $dir/crl              # Where the issued crl are kept   ××××××证书吊销列表  不属于必须创建的目录  
  7. database        = $dir/index.txt        # database index file.       *****************存放生成证书文件索引  需要手动创建的文件  
  8. #unique_subject = no                    # Set to 'no' to allow creation of       
  9.                                         # several ctificates with same subject.   
  10. new_certs_dir   = $dir/newcerts         # default place for new certs.   ××××××××××x新生成的证书存放地  需要手动创建                                                                                                      
  11. certificate     = $dir/cacert.pem       # The CA certificate  
  12. serial          = $dir/serial           # The current serial number               ××××××序列号,需要自己建每一个证书都有一个序列号需要自己建,并指定从几开始  
  13. crlnumber       = $dir/crlnumber        # the current crl number  
  14.                                         # must be commented out to leave a V1 CRL   
  15. crl             = $dir/crl.pem          # The current CRL  
  16. private_key     = $dir/private/cakey.pem# The private key  
  17. RANDFILE        = $dir/private/.rand    # private random number file  
  18. x509_extensions = usr_cert              # The extentions to add to the cert  
  19. # req_extensions = v3_req # The extensions to add to a certificate request   
  20. #########修改证书CSR与自己的匹配   
  21. [ req_distinguished_name ]  
  22. countryName                     = Country Name (2 letter code)  
  23. countryName_default             = CN                                                           #我修改为CN和CA的自签证书对应  
  24. countryName_min                 = 2  
  25. countryName_max                 = 2  
  26.   
  27. stateOrProvinceName             = State or Province Name (full name)  
  28. stateOrProvinceName_default     = Henan                                            #同上  
  29.   
  30. localityName                    = Locality Name (eg, city)  
  31. localityName_default            = Zhengzhou                                              #同上  
  32.   
  33. 0.organizationName              = Organization Name (eg, company)  
  34. 0.organizationName_default      = Tech                                                  #同上  

4.创建CA的相关目录和文件,指定序列号起始数字,在上一步已经说明,它们在CA所在目录创建

  1. [root@www.linuxidc.com ~]# cd /etc/pki/CA/  
  2. [root@www.linuxidc.com CA]# mkdir certs crl newcerts  
  3. [root@www.linuxidc.com CA]# ls  
  4. cacert.pem  certs  crl  newcerts  private  
  5. [root@www.linuxidc.com CA]# touch index.txt serial  
  6. [root@www.linuxidc.com CA]# echo 01 > serial  

推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • Linux 服务器修改用户名
    Linux服务器修改用户名1、编辑名称vimetchostname2、保存编辑并退出wq3、重 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
  • 本文总结了Linux下多线程执行shell脚本的4种方法,包括切换到工作目录执行、使用绝对路径执行、直接使用bash或sh执行。同时介绍了为什么需要加上"./"来执行脚本的原因。 ... [详细]
  • ZABBIX 3.0 配置监控NGINX性能【OK】
    1.在agent端查看配置:nginx-V查看编辑时是否加入状态监控模块:--with-http_stub_status_module--with-http_gzip_stat ... [详细]
  • systemd-nspawn可以创建最轻量级的容器(ns的意思就是namespace),本文的实验平台是Ubuntu16.04,x86_64机器。本文的目的是:在Ubuntu中用syst ... [详细]
author-avatar
mobiledu2502884677
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有