安装 openssl本文意在说明如何在内网环境中使用 Nginx 支持 HTTPS 方式访问项目
官网:openssl.org
下载链接:https://www.openssl.org/source/openssl-1.1.1l.tar.gz
## 创建文件夹 mkdir /home/archser/soft/ ## 将软件上传到服务器的 openssl 文件夹中、解压 tar -xzvf openssl-1.1.0-pre1.tar.gz ## 进入文件夹 cd openssl-1.1.0-pre1 ## 自动配置 --prefix=/usr/local/openssl 在特殊情况也可以不写,但是会导致找不到 libssl.so.1.1 ,后面也有解决方式 ./config --prefix=/usr/local/openssl ## 编译 make ## 安装 make install生成证书
# 1、首先,进入你想创建证书和私钥的目录,我直接进入openssl-1.1.1l目录,比较方便 cd /home/archser/soft/openssl-1.1.1l # 2、创建服务器私钥,会让你输入一个口令,输入完之后会生成 server.key openssl genrsa -des3 -out server.key 1024 # 3、创建签名请求的证书(CSR):这里会让确认很多配置,全部直接回车即可,生成 server.csr, # Common Name 要特别注意, 要用你服务器的域名,我们测试用ttt.com openssl req -new -key server.key -out server.csr # 4、在加载SSL支持的Nginx并使用上述私钥时除去必须的口令: cp server.key server.key.org openssl rsa -in server.key.org -out server.key # 5、最后标记证书使用上述私钥和CSR: 生成 server.crt openssl x509 -trustout -req -days 365 -in server.csr -signkey server.key -out server.crt检查 Nginx 插件情况
[root@MiWiFi-R3600-srv soft]# nginx -V nginx version: nginx/1.14.2 built by gcc 4.8.5 20150623 (NeoKylin 4.8.5-39) (GCC) configure arguments: --prefix=/home/archser/soft/nginx ## 如果出现 (configure arguments: --with-http_ssl_module), 说明已安装, ## 但是使用这个文档的情景应该都没有安装过的配置 Nginx 的 ssl
一般情况下都是不存在ssl模块的,接下来进入到你的解压缩后的nginx目录,注意这里不是nginx安装目录,是解压缩后的目录,进入目录执行:
## 配置ssl 模块,进入解压缩后的nginx目录 ## 如果前面执行 ./config --prefix=/usr/local/openssl 的时候没有加入后面的文件路径,可能会报找不到文件 ## 解决方案:指定文件夹路径 ##./configure --prefix=/home/archser/soft/nginx --with-http_ssl_module --with-openssl=/home/archser/soft/openssl-1.1.1l ./configure --prefix=/home/archser/soft/nginx --with-http_ssl_module ## 接下来执行 make ## 切记不要执行 **make install**,否则会重新安装 nginx,会覆盖之前的配置
上述操作执行完成以后,你的目录下会出现 objs 文件夹,文件夹内存在 nginx 文件
需要将之前的 nginx 备份,将 objs 文件夹中的 nginx文件复制到之前的Nginx文件夹中
## 进入原本 Nginx 的 sbin 目录 cd /home/archser/soft/nginx/sbin/ ## 备份文件 cp nginx nginx.bck ## 复制新的 nginx 文件 cp /home/archser/soft/nginx-1.14.2/objs/nginx ./Nginx 支持 HTTPS
## 备份原始配置文件
cd /home/archser/soft/nginx/conf/
cp nginx.conf nginx.conf.backup
## 修改配置文件,将下面的内容加入到 nginx.conf 文件中的 http 的大括号中
server {
listen 443 ssl;
server_name localhost1;
ssl on;
## 下面是我们之前生成的文件的位置
ssl_certificate /home/archser/soft/openssl-1.1.1l/server.crt;
ssl_certificate_key /home/archser/soft/openssl-1.1.1l/server.key;
ssl_session_timeout 5m;
location / {
root html;
index index.html index.htm testssl.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
测试 nginx 配置是否正常: nginx -t
重启 nginx ,reload 可能会不生效,建议停止之后重启:
nginx -s stop nginx
使用 https 访问服务器,不用加端口号,https 默认端口号是 443
会出现提示连接不是专用连接的情况,点击 高级 --> 继续访问 即可
修改项目配置信息 修改 Nginx 配置信息参照上面的配置,修改所有项目的前端配置文件,文件位置在 nginx/conf/services 所有文件都需要修改
- 端口号后面加
ssllisten 443 ssl;
- 补充配置信息
ssl on; ssl_certificate /home/archser/soft/openssl-1.1.1l/server.crt; ssl_certificate_key /home/archser/soft/openssl-1.1.1l/server.key; ssl_session_timeout 5m;
- 如下所示
server {
listen 11028 ssl;
ssl on;
ssl_certificate /home/archser/soft/openssl-1.1.1l/server.crt;
ssl_certificate_key /home/archser/soft/openssl-1.1.1l/server.key;
ssl_session_timeout 5m;
location / {
root /home/archser/services/aserver-ui;
index index.html;
try_files $uri $uri/ =404;
}
location ~ .(gif|jpg|jpeg|bmp|png|ico|txt|mp3|mp4|swf|css|js|ttf)$ {
root /home/archser/services/aserver-ui;
expires max;
}
location /aserver {
proxy_pass http://127.0.0.1:11038/aserver;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# websocke 连接需要下面的配置
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Real-IP $remote_addr;
}
}
修改数据库连接信息
update AS_CONFIG set val = replace(val,'http','https') where id = 1; update AS_SYSTEM set url = replace(url,'http','https');让 nginx 重新加载配置文件
nginx -s reload
测试https 访问结果:
-
谷歌浏览器访问 https://ip ,浏览器会提示连接不是私密连接
-
点击 高级 -> 继续访问 即可正常访问
这个问题的原因是 openssl 需要 libssl.so.1.1,但是有的服务器上使用的相关文件不是这个版本,所以会报没有这个文件
[root@MiWiFi-R3600-srv key]# openssl genrsa -des3 -out server.key 1024 openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory解决方案:
## 是因为在配置 openssl 的时候没有指定配置路径,操作系统找不到文件 ## 可以为文件生成软连接去解决这个问题 ln -s /home/archser/soft/openssl-1.1.1l/libssl.so.1.1 /usr/lib64/libssl.so.1.1 ln -s /home/archser/soft/openssl-1.1.1l/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1需要安装 openssl
问题原因是服务器中缺失 openssl 的环境
百度上都是使用 yum 安装的,执行 yum -y install openssl openssl-devel 但是我们的项目现场可能无法使用 yum
解决方案:指定 openssl 的路径./configure --prefix=/home/archser/soft/nginx --with-openssl=/home/archser/soft/openssl-1.1.1l --with-http_ssl_module



