ssl证书https
ssl证书获取方式
购买证书(免费的3个月有效期 到期更换 每年每个账号可申请20个免费)
自己充当CA机构生成假证
自己生成ssl证书
1. 创建存放证书的目录
[root@web01 ~]# mkdir -p /etc/nginx/ssl_key
2. 生成证书私钥
执行以下命令生成 RSA 私钥,过程中需要输入并确认密码(示例中密码为 1234):
[root@web01 ssl_key]# openssl genrsa -idea -out server.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
..................................................+++++
.................................................................................................................................................................................................+++++
e is 65537 (0x010001)
Enter pass phrase for server.key: # 输入密码 1234
Verifying - Enter pass phrase for server.key: # 再次输入 1234
[root@web01 ssl_key]#ll 查看
3. 生成证书请求及自签名证书
接着执行以下命令生成有效期为 36500 天的自签名证书(server.crt
),过程中会要求输入一些证书相关信息,如国家代码、省份名称、城市、组织名称等,示例中输入相应信息如下:
[root@web01 ssl_key]# openssl req -days 36500 -x509 \
> -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
> Generating a RSA private key
> ...........................................................................+++++
> ..........+++++
> writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:CN
Locality Name (eg, city) []:BJ
Organization Name (eg, company) [Internet Widgits Pty Ltd]:oldboy
Organizational Unit Name (eg, section) []:oldboy
Common Name (e.g. server FQDN or YOUR name) []:CN
Email Address []:11@qq.com
查看证书的有效时间
使用以下命令查看证书(server.crt
)的有效时间:
[root@web01 ssl_key]# openssl x509 -in /etc/nginx/ssl_key/server.crt -noout -enddate
notAfter=Nov 23 00:40:38 2124 GMT
HTTP 证书配置
一、使用自生成证书的配置
- Nginx 配置文件内容(
test.conf
)
以下是在[root@web01 conf.d]
目录下test.conf
文件中关于使用自生成证书的相关 Nginx 配置示例,配置了针对test.oldboy.com
域名的服务:
server {
listen 443 ssl;
server_name test.oldboy.com;
ssl_certificate ssl_key/server.crt; //指定证书文件路径
ssl_certificate_key ssl_key/server.key; //指定证书私钥文件路径
location / {
root /code;
index index.html;
}
}
#配置将用户访问http请求强制跳转https
server {
listen 80;
server_name test.oldboy.com;
return 302 https://$server_name$request_uri;
}
同时,在/code
目录下有对应的index.html
文件(内容示例为web01...
),并且需要将域名通过hosts
解析到web01
服务器
二、配置真实证书的步骤及相关配置
- 步骤概述
- 购买证书:首先需要从相关证书颁发机构购买合适的证书,确保其符合业务需求以及服务器使用场景等要求。
- 下载证书到本地:完成购买后,将证书文件下载到本地服务器相应位置,以便后续配置使用。
- 配置到 Nginx 服务:在 Nginx 配置中进行相应设置,使其能正确使用该真实证书。
- Nginx 配置文件内容(
test.conf
)示例(针对test.linuxnc.com
域名)
如下同样是[root@web01 conf.d]
目录下test.conf
文件中关于配置真实证书时的 Nginx 配置示例,针对test.linuxnc.com
域名做了类似的配置,配置中指定证书及私钥文件路径等信息:
server {
listen 443 ssl;
server_name test.linuxnc.com;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
location / {
root /code;
index index.html;
}
}
#配置将用户访问http请求强制跳转https
server {
listen 80;
server_name test.linuxnc.com;
return 302 https://$server_name$request_uri;
}
集群实现 HTTPS 证书
1.集群部署ssl
(一)WEB01 配置静态页面
- 配置文件内容:
在/etc/nginx/conf.d
目录下创建test.conf
,内容如下:
server {
listen 80;
server_name test.linuxnc.com;
location / {
root /code;
index index.html;
}
}
- 验证与重启:
执行nginx -t
命令验证配置文件语法正确后,通过systemctl restart nginx
重启 Nginx 服务。可使用curl 127.0.0.1
进行简单测试。
(二)WEB02 配置静态页面
- 配置文件内容:
在/etc/nginx/conf.d
目录下编辑test.conf
,内容如下:
server {
listen 80;
server_name test.linuxnc.com;
location / {
root /code/test;
index index.html;
}
}
同时确保/code/test/index.html
文件存在且有对应内容(示例中内容为web02....
)。
同时确保/code/test/index.html
文件存在且有对应内容(示例中内容为web02....
)。
\2. 验证与重启:
同样执行nginx -t
验证配置语法无误后,使用systemctl restart nginx
重启 Nginx 服务。
(三)LB 负载均衡配置证书
- 配置文件内容:
在/etc/nginx/conf.d
目录下的test.conf
配置如下:
server {
listen 80;
server_name test.linuxnc.com;
return 302 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name test.linuxnc.com;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
location / {
proxy_pass http://web;
include proxy_params;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
}
}
upstream web {
server 172.16.1.203:80;
server 172.16.1.204:80;
}
- 证书拷贝与相关操作:
使用scp -r 10.0.0.7:/etc/nginx/ssl_key.
将证书拷贝到 LB01 服务器,之后执行nginx -t
验证配置文件语法,若无误则通过systemctl restart nginx
重启 Nginx 服务,最后将hosts
解析到10.0.0.5
。
2、配置 WordPress 实现 https 证书
(一)配置负载均衡
- 配置文件内容:
在/etc/nginx/conf.d
目录下创建wp.conf
,内容如下:
upstream wp {
server 172.16.1.7:80;
server 172.16.1.8:80;
}
server {
listen 443 ssl;
server_name www.wp.com;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
location / {
proxy_pass http://wp;
include proxy_params;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
}
}
server {
listen 80;
server_name www.wp.com;
return 302 https://$server_name$request_uri;
}
(二)WEB01 和 WEB02 开启 PHP 支持 HTTPS
- 配置文件内容(以 WEB01 为例):
在/etc/nginx/conf.d
目录下的wp.conf
配置如下:
server {
listen 80;
server_name www.wp.com;
root /code/wordpress;
location / {
index index.php index.html;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_param HTTPS on; # 开启PHP对HTTPS的支持
}
}
需在 WEB02 上进行类似配置操作,最终目的是要配置 WordPress、知乎、phpmyadmin 为 https 传输(此处后续可能还需针对知乎、phpmyadmin 做相应配置,当前提供内容未完整展示这两部分详细配置步骤)。
阿里云单台实现HTTPS
- 购买 ECS 服务器:选择按量付费的方式购买一台 ECS 服务器。
二、安装与配置 Nginx 服务
- 配置 Nginx 基础设置:
配置文件ceshi.conf
相关内容如下,定义了如用户、进程、日志、事件等基础配置以及 HTTP 相关的通用配置,包括日志格式、访问日志路径、各类文件传输及连接相关设置等,还指定了要包含的其他配置文件路径等。
server {
listen 80;
server_name test.linuxnc.com;
root /code;
include /etc/nginx/default.d/*.conf;
}
创建一个简单的测试页面,示例如下:
[root@web01 nginx]# echo web01... > /code/index.html
可以通过curl 127.0.0.1
进行本地测试,能看到返回页面内容 “web01…”。
三、配置 DNS 域名解析
按照相关要求进行域名解析配置,此处应关联好服务器对应的域名(示例中域名为test.linuxnc.com
),可能涉及在域名管理后台等相关操作,文中未详细展示具体配置界面截图以外的详细步骤。
四、配置 nginx 实现 https 证书
- 上传证书到服务器:
将下载好的证书通过scp
命令上传到服务器指定目录,示例如下:
[root@lb01 nginx]# scp -r ssl_key 39.104.76.191:/etc/nginx/
- 配置 Nginx 支持 HTTPS:
修改nginx.conf
文件,在对应server
配置块中添加 HTTPS 相关配置,如监听 443 端口并启用 SSL,指定证书及证书密钥文件路径等,同时添加从 80 端口重定向到 HTTPS(443 端口)的配置,如下所示:
server {
listen 443 ssl;
server_name test.linuxnc.com;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
root /code;
include /etc/nginx/default.d/*.conf;
}
server {
listen 80;
server_name test.linuxnc.com;
return 302 https://$server_name$request_uri;
}
}