• Linux下生成免费HTTPS证书


    前言

    HTTPS在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性,安全基础为SSL(安全套接字协议)。

    简单原理

    总的来说,先通过非对称加密传输密钥,之后用该密钥对数据进行对称加密。

    1. 客户端向服务器发起HTTPS请求,连接到服务器的443端口
    2. 服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能泄露,公钥可以发送给任何人。服务器将自己的证书发送给客户端,证书中包含公钥。
    3. 客户端收到服务器端的证书之后,对证书进行检查,验证其合法性。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次报文请求结束。
    4. 客户端发起HTTPS中的第二个报文请求,将加密之后的客户端密钥发送给服务器。
    5. 服务器接收到客户端发来的密文之后,用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。然后服务器将加密后的密文发送给客户端。
    6. 客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个报文请求结束,整个HTTPS传输完成。

    生成HTTPS证书

    查看系统是否安装了openssl

    openssl version -a
    

    生成根证书的私钥

    openssl genrsa -des3 -out server.key 2048
    

    genrsa:产生rsa密钥
    -out:输出文件名
    2048:密钥的长度位数,默认为512

    最后生成server.key文件

    去除访问server.key每次输入密码的步骤

    openssl rsa -in server.key -out server.key
    

    生成服务器证书的申请文件

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

    主要填写内容如下

    Country Name (2 letter code) [AU]:CN  国家
    State or Province Name (full name) [Some-State]:SH  省
    Locality Name (eg, city) []:SH  市
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:SZZ  组织
    Organizational Unit Name (eg, section) []:SZZ   单位
    Common Name (e.g. server FQDN or YOUR name) []:SZZ 个人
    Email Address []:szz@13.com  邮箱
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []: 密码
    An optional company name []: 公司(可选)
    

    最后生成server.csr文件

    生成根证书

    openssl req -new -x509 -key server.key -out ca.crt -days 3650
    

    -new:表示生成一个新证书签署请求
    -x509:专用于CA生成自签证书,如果不是自签证书则不需要此项
    -key:用到的私钥文件
    -out:证书的保存路径
    -days:证书的有效期限,单位是天

    最后生成ca.crt文件

    生成服务器证书

    openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt
    

    最后生成ca.srl,server.crt两个文件,此时一共生成了server.key,server.csr,ca.srl,ca.crt,server.crt 5个文件。

    使用Docker安装Nginx

    前提是已经安装了Docker并且已启动,Linux下Docker安装及使用

    安装Nginx

    docker pull nginx
    

    运行Nginx

    docker run --name nginx -p 8080:80 -p 443:443 -d nginx
    

    服务器端口8080映射容器内部的80端口,443(HTTPS使用)映射443端口,-d表示后台运行,此时访问页面如下

    如果不能访问,记得要开放防火墙对端口8080的访问。

    将之前生成的证书拷贝到Nginx配置目录

    docker cp server.key c38536903a8d:/etc/nginx/
    docker cp server.crt c38536903a8d:/etc/nginx/
    

    将证书拷贝到容器内部的/etc/nginx/路径下,c38536903a8d为容器ID

    修改Nginx配置文件

    docker cp c38536903a8d:/etc/nginx/nginx.conf .
    

    先将配置文件从容器内部复制到当前目录

    user  nginx;
    worker_processes  auto;
    
    error_log  /var/log/nginx/error.log notice;
    pid        /var/run/nginx.pid;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
        keepalive_timeout  65;
    
        #gzip  on;
    
        include /etc/nginx/conf.d/*.conf;
    
        server {
            listen 443;
            server_name 42.192.20.119;  #这里可以填IP或者域名
            ssl on;
            ssl_certificate /etc/nginx/server.crt;     #配置证书位置
            ssl_certificate_key /etc/nginx/server.key; #配置秘钥位置】
            location / {
                root /usr/share/nginx/html;
                index index.html;
            }
        }
    }
    

    增加的内容为整个server块,配置了监听端口号和SSL证书的路径。

    docker cp nginx.conf c38536903a8d:/etc/nginx/
    

    将配置文件拷贝到容器内。

    重启Nginx

    docker restart c38536903a8d
    

    此时访问页面如下,可以看到证书已经生效了。

    参考

    彻底搞懂HTTPS的加密原理
    HTTPS理论基础
    【教程】Linux下Https证书生成,与Nginx配置https
    Docker 命令大全
    【Nginx】之 nginx.conf 配置详解

  • 相关阅读:
    1104--DNA排序
    poj1050-To the Max
    编译:一个 C 程序的艺术之旅(转载)
    大话同步/异步、阻塞/非阻塞(转载)
    Windows 在 git bash下使用 conda 命令
    Python Multiprocessing 多进程,使用多核CPU计算 并使用tqdm显示进度条
    Python 写入训练日志文件并控制台输出
    nn.Conv2d 参数及输入输出详解
    Python中 list, numpy.array, torch.Tensor 格式相互转化
    Linux 上传代码到github
  • 原文地址:https://www.cnblogs.com/strongmore/p/16214673.html
Copyright © 2020-2023  润新知