• CA证书制作实战


    需求:

            自建CA 颁发证书

    使用自签名证书来构建安全网络,所谓自签名证书,就是自己扮演 CA 机构,自己给自己的服务器颁发证书。

    1、OpenSSL

            OpenSSL是一个以C语言编写现了SSL与TLS协议的开源的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连线者的身份。这个包广泛被应用在互联网的网页服务器上。OpenSSL支持Linux、Windows、BSD(Unix的衍生系统)、Mac等平台,这使得OpenSSL具有广泛的适用性。 

    OpenSSL整个软件包大概可以分成三个主要的功能部分:

    • 加密算法库
      • 对称加密算法:
      • 非对称加密算法
      • 信息摘要算法
    • SSL协议库
      • OpenSSL实现了SSL协议的SSLv2和SSLv3,支持了其中绝大部分算法协议
      • OpenSSL也实现了TLSv1.0+
    • 应用程序
      • 多功能的命令行工具,可以实现加密解密、密钥生成、密钥和证书管理、自建CA和签名等功能 

    2、过程

    1. CA生成根密钥
    2. CA生成根证书
    3. Nginx生成私钥
    4. Nginx申请证书
    5. CA签发
    6. Nginx安装证书,配置

    3、颁发证书

    默认情况下Linux操作系统已经内置安装了OpenSSL,可以通过openssl version 查看版本号

            但是在使用前,需要注意下当前OpenSSL的库的版本,因为版本1.0.1是一个很重要的风水岭版本,1.0.1是第一个支持TLS1.1和1.2的版本。

    修改配置:

    在CA目录下创建两个初始文件,维护序列号。通过CA机构签发的每个证书都有一个唯一的序列号。

    cd /etc/pki/CA
    touch index.txt serial
    echo 01 > serial

    生成根密钥

    表示的CA机构的私钥,CA结构签发的每一个证书都要通过自己的私钥进行签名。

    cd /etc/pki/CA
    #生成一个2048位的密钥
    openssl genrsa -out private/cakey.pem 2048

    生成根证书

    使用req命令生成自签证书

    • -new:表示新的申请
    • -x509:表示生成自签证书
    • -key:指定私钥文件
    • -out:保存证书的位置
    • -days:指定证书期限

    openssl req -new -x509 -key private/cakey.pem -out cacert.pem

    会提示输入一些内容,因为是私有的,所以可以随便输入(之前修改的openssl.cnf会在这里呈现),最好记住能与后面保持一致。上面的自签证书cacert.pem 应该生成在/etc/pki/CA 下。

    为我们的Nginx服务器生成SSL密钥

    环境:
            192.168.200.16 CA机构服务器
            192.168.200.16 Nginx服务器
    申请SSL证书本质上就是服务器升级支持HTTPS,非对称加密(公钥和私钥)。
    以上都是在CA服务器上做的操作,而且只需进行一次,现在转到nginx服务器上执行:

    安装Nginx

    1. #1.安装该rpm
    2. rpm -ivh
    3. http://nginx.org/packages/centos/7/noarch/RPMS/nginx-releasecentos-7-0.el7.ngx.noarch.rpm
    4. #安装该rpm后,我们就能在/etc/yum.repos.d/ 目录中看到一个名为nginx.repo 的文件。
    5. #2.安装完Nginx源后,就可以正式安装Nginx了。
    6. yum install -y nginx
    7. #3.查看所在目录
    8. whereis nginx

    cd /etc/nginx/ssl
    #为我们的nginx web服务器生成ssl密钥
    openssl genrsa -out nginx.key 2048

    为nginx生成证书签署请求

    该过程会生成一个文件,包含了证书相关的信息,但是该文件不是证书,生成证书的请求文件。

    该文件需要发送给CA机构,由CA签名后生成一个证书文件。

    openssl req -new -key nginx.key -out nginx.csr
    ...
    Country Name (2 letter code) [AU]:CN
    State or Province Name (full name) [Some-State]:GD
    Locality Name (eg, city) []:SZ
    Organization Name (eg, company) [Internet Widgits Pty
    Ltd]:COMPANY
    Organizational Unit Name (eg, section) []:IT_SECTION
    Common Name (e.g. server FQDN or YOUR name)
    []:your.domain.com
    Email Address []:
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    ...

    同样会提示输入一些内容,其它随便,除了Commone Name 一定要是你要授予证书的服务器域名或主机名,challenge password不填。

    私有CA根据请求来签署证书

    接下来要把上一步生成的证书请求csr文件,发到CA服务器上,在CA上执行:

    openssl ca -in nginx.csr -out nginx.crt

            上面签发过程其实默认使用了-cert cacert.pem -keyfile cakey.pem ,这两个文件就是前两步生成的位于/etc/pki/CA 下的根密钥和根证书。将生成的crt证书发回nginx服务器使用。 

            到此我们已经拥有了建立SSL安全连接所需要的所有文件,并且服务器的crt和key都位于配置的目录下,剩下的是如何使用证书的问题。

    4、使用 SSL证书

    Nginx 使用 SSL 证书

            在本地安装完成证书(在Nginx服务器配置)也就意味着Java Web应用已经完成了从http到https协议的升级

            以 Nginx 为例,在 Nginx 中新建ssl文件夹,将生成的crt和key放入其中,配置文件中加入以下代码:

    1. #修改Nginx的配置文件,安装SSL证书
    2. cd /etc/nginx/conf.d
    3. vi default.conf
    4. listen 443 ssl http2;#https协议监听的端口号是443端口,基于http2进行工作的。
    5. ssl_certificate /etc/nginx/ssl/nginx.crt; # 指向 ssl文件夹中的 crt 文件
    6. ssl_certificate_key /etc/nginx/ssl/nginx.key; # 指向ssl 文件夹中的 key 文件
    7. ssl_session_timeout 5m;
    8. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    9. #启用false start加速
    10. ssl_ciphers
    11. AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
    12. ssl_prefer_server_ciphers on;

    启动Nginx

    #切换到可执行目录
    cd /usr/sbin/
    ./nginx
    #查看启动状态

    ps -ef|grep nginx 

    访问测试

    curl https://192.168.200.21

            但是,我们自己签发的证书,是不受其他服务器信任的,当发起 curl 请求时,会出现以下情况:证书无效或无法验证错误。这时候,我们就需要将我们 CA 服务器的根证书导入到这台服务器中。 

    添加证书:

    1. #安装 ca-certificates package:
    2. yum install ca-certificates
    3. #启用dynamic CA configuration feature:
    4. update-ca-trust force-enable
    5. #将证书文件放到 /etc/pki/ca-trust/source/anchors/ 目录下
    6. mv /etc/pki/CA/cacert.pem /etc/pki/ca-trust/source/anchors/
    7. #执行更新:
    8. update-ca-trust extract

    修改本地host文件

    cd /etc
    vi hosts

    127.0.0.1 localhost localhost.localdomain localhost4localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6localhost6.localdomain6
    192.168.200.21 yj.com #添加的字段

    访问测试

    curl https://yj.com

  • 相关阅读:
    【tokio】异步编程
    AJAX & Axios & JSON (外加JSON数据格式案例)
    【C语言进阶】指针进阶(三)
    Collections unmodifiableCollection,emptyList,singletonList 介绍以及总结
    sentinel介绍和使用
    ARM异常处理(2):中断的输入和挂起的6种情况分析
    保证数据库质量安全:从0开始的数据库测试
    复习单片机:IIC-EEPROM 实验(内含:1.IIC-EEPROM介绍+2.AT24C02 介绍+3.硬件设计+4.软件设计+5.实验现象)
    微信小程序实现一些优惠券/卡券
    外汇天眼;近年来“离岸监管”券商愈来愈多,这风潮为何让人又爱又恨?
  • 原文地址:https://blog.csdn.net/weixin_52851967/article/details/125959902