HTTPS在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性,安全基础为SSL(安全套接字协议)。
总的来说,先通过非对称加密传输密钥,之后用该密钥对数据进行对称加密。
openssl version -a
openssl genrsa -des3 -out server.key 2048
genrsa:产生rsa密钥
-out:输出文件名
2048:密钥的长度位数,默认为512
最后生成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并且已启动,Linux下Docker安装及使用
docker pull nginx
docker run --name nginx -p 8080:80 -p 443:443 -d nginx
服务器端口8080映射容器内部的80端口,443(HTTPS使用)映射443端口,-d表示后台运行,此时访问页面如下
如果不能访问,记得要开放防火墙对端口8080的访问。
docker cp server.key c38536903a8d:/etc/nginx/ docker cp server.crt c38536903a8d:/etc/nginx/
将证书拷贝到容器内部的/etc/nginx/路径下,c38536903a8d为容器ID
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/
将配置文件拷贝到容器内。
docker restart c38536903a8d
此时访问页面如下,可以看到证书已经生效了。
彻底搞懂HTTPS的加密原理
HTTPS理论基础
【教程】Linux下Https证书生成,与Nginx配置https
Docker 命令大全
【Nginx】之 nginx.conf 配置详解