Linux下生成免费HTTPS证书

91次阅读
没有评论

共计 2857 个字符,预计需要花费 8 分钟才能阅读完成。

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

Linux 下生成免费 HTTPS 证书

简单原理

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

  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 表示后台运行,此时访问页面如下

Linux 下生成免费 HTTPS 证书

如果不能访问,记得要开放防火墙对端口 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

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

Linux 下生成免费 HTTPS 证书

正文完
 
阿里郎
版权声明:本站原创文章,由 阿里郎 2022-10-26发表,共计2857字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
国外主机测评
国外主机测评
专注于主机测评,主机推荐,VPS测评,VPS推荐,VPS教程,服务器推荐,Linux教程,服务器教程
阅读量
185458
评论数
35



hostkvm优惠促销活动
评论(没有评论)
衡天云优惠活动