http协议改为https

项目自签名ssl证书,配置https

一、自签名证书:

准备ssl证书一份,这里使用JDK生成秘钥证书:
Win+R 输入cmd,调出命令行窗口
在这里插入图片描述

在命令行窗口输入,生成命令:

keytool -genkey -alias myssl -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore G:\ keystore.p12 -validity 365
(1)关键字解释:
 * alias  密钥别名
 * storetype 指定密钥仓库类型
 * keyalg 生证书的算法名称,RSA是一种非对称加密算法
 * keysize 证书大小
 * keystore 生成的证书文件的存储路径 (我这里选择在G盘下)
 * validity 证书的有效期 (这里设置为一年)

(2)生成证书注意:
在输入证书生成命令之后,会提示输入:
 - 密钥库口令:证书密码,在后面的项目中配置证书时用到
 - 姓氏:一般没什么用,在浏览器中查看证书时会显示,用于正式场合的证书还是需要填写标准。
 - 组织单位:证书使用单位信息,一般没什么用,在浏览器中查看证书时会显示,用于正式场合的证书还是需要填写标准。
 - 组织单位名称:证书使用单位名称,一般没什么用,在浏览器中查看证书时会显示,用于正式场合的证书还是需要填写标准。
 - 所在的城市或区域名称:浏览器中查看证书信息时会显示。
 - 所在的省/市/自治区名称:浏览器中查看证书信息时会显示。
 - 单位的双字母国家/地区代码:国家或地区编码,浏览器中查看证书信息时会显示。

二、将生成的密钥证书拷贝到项目中的resource中(也可以不拷贝到项目中,后面配置路径时配置密钥证书的绝对路径即可)

在这里插入图片描述

三、修改项目配置文件application.properties,增加如下配置项在这里插入图片描述

server.ssl.key-store=classpath:keystore.p12  #证书文件路径,也可以配置绝对路径
server.ssl.key-store-password=jyd666  #证书密码,证书生成时输入的密钥库口令
server.ssl.keyStoreType=PKCS12   #证书类型,与证书生成命令一致
server.ssl.keyAlias=jydssl     #证书别名,与证书生成命令一致

如果是application.yml配置文件:
在这里插入图片描述

server:
  # 服务器的HTTP端口,默认为80
  port: 9999
  ssl:
    key-store: classpath:keystore.p12 #证书文件路径
    key-store-password: jyd666 #证书密码
    key-store-type: PKCS12 #证书类型
    key-alias: jydssl #证书别名

四、之后启动项目访问https路径即可

Linux-nginx配置https

一、需要的环境:

配置nginx支持https协议访问,需要在编译安装nginx的时候添加相应的模块--with-http_ssl_module
查看nginx编译参数:/usr/local/nginx/sbin/nginx -V
在这里插入图片描述)
如果没有--with-http_gzip_static_module这个参数,需要重新编辑nginx

二、创建https证书:

确保机器上安装了openssl 和 openssl-devel
yum install openssl openssl-devel # CentOS使用yum命令安装
mkdir /usr/local/nginx/conf/ssl # 创建证书存放目录
cd /usr/local/nginx/conf/ssl # 进入目录

创建服务器私钥:openssl genrsa -des3 -out server.key 1024 #根据提示输入证书口令
在这里插入图片描述)

  1. 创立根证书密钥文件(自己做CA)root.key:
[root@linux ssl]# openssl genrsa -des3 -out root.key
Generating RSA private key, 512 bit long modulus
……………..++++++++++++
..++++++++++++
e is 65537 (0×10001)
Enter pass phrase for root.key: ← 输入一个新密码
Verifying – Enter pass phrase for root.key: ← 重新输入一遍密码
  1. 创立根证书的申请文件root.csr:
[root@linux ssl]# openssl req -new -key server.key -out server.csr
Enter pass phrase for root.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 ‘.whflsc.com’, the field will be left blank.



Country Name (2 letter code) [XX]:cn  #国家,中国输入CN
State or Province Name (full name) []:zhejiang  #省份
Locality Name (eg, city) [Default City]:hangzhou  #城市
Organization Name (eg, company) [Default Company Ltd]:osyunwei  #公司
Organizational Unit Name (eg, section) []:sys  #部门
Common Name (eg, your name or your server's hostname) []:osyunwei   #主机名称
Email Address []:xxx@qq.com  #邮箱

Please enter the following 'extra' attributes
to be sent with your certificate request

A challenge password []:123456  #证书请求密钥,CA读取证书的时候需要输入密码
An optional company name []:osyunwei  #公司名称,CA读取证书的时候需要输入密码
openssl rsa -in server.key -out server_nopassword.key  #对key进行解密

  1. 创立一个自目前日期起为期十年的根证书root.crt:
[root@linux ssl]# openssl x509 -req -days 3650 -in server.csr -signkey server_nopassword.key -out server.crt

三、修改nginx配置文件,加载ssl证书

修改nginx.conf配置:
[root@linux ssl]# vim /usr/local/nginx/conf/nginx.conf # 编辑
找到 HTTPS server块,放开除HTTPS server的注释
在这里插入图片描述
进行如下修改:

# HTTPS server
server {
    listen       443 ssl;
    server_name  localhost;

    ssl_certificate      /usr/local/nginx/conf/ssl/server.crt;  #cert/证书名称.pem;
	ssl_certificate_key  /usr/local/nginx/conf/ssl/server_nopassword.key; #cert/证书名称.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        proxy_pass https://127.0.0.1:9999/; #需要代理的项目路径
		#root   html;
        #index  index.html index.htm;
    }
}

:wq! #保存退出

下面是个人的配置:
nginx端口为8888,代理项目端口9999,之后访问项目只需访问https://域名或ip/8888
(这里并没有使用默认端口443,使用其他端口则需要在linux中开放对应的端口,因为linux默认不开放端口,开放端口的方法在后面↓)
在这里插入图片描述
配置完成后退出编辑,重启nginx:

/usr/local/nginx/sbin/nginx -s reload # 重启nginx
/usr/local/nginx/sbin/nginx -t # 检查nginx是否启动成功
在这里插入图片描述

四、linux防火墙开启https协议端口8888

linux中输入如下命令:
vi /etc/sysconfig/iptables # 编辑防火墙配置文件
添加以下代码:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
之后,
:wq! # 保存退出
再重启防火墙:
service iptables restart #重启防火墙

鉴于linux版本不同,如果你的linux不支持上述命令,那么用下面的firewall命令:

# 打开8888/TCP端口
firewall-cmd --add-port=8888/tcp

# 永久打开8888/TCP端口
firewall-cmd --permanent --add-port=8888/tcp

# 永久打开端口需要reload一下,临时打开不用,如果用了reload临时打开的端口就失效了
# 重启防火墙
firewall-cmd --reload

# 查看防火墙
firewall-cmd --list-all

ps:关闭端口
firewall-cmd --remove-port=80/tcp --permanent
firewall-cmd --reload

五、访问项目

自此完毕,访问项目路径进行测试。

六、缺少SSL模块错误

若出现nginx:[emerg]unknown directive ssl这个错误提示,是因为编译Nginx的时候并没有把SSL模块一起编译进去。

错误解决步骤:

我们只需要在原有的基础上添加ssl模块,不需要重新安装Nginx。

首先,我们cd到当初下载nginx的包压缩的解压目录,我这里的解压目录在“/usr/loacl/nginx/”。
进入到解压目录下后,按顺序执行一下命令:

  • ./configure --with-http_ssl_module # 重新添加ssl模块
    若执行上面这条命令出现错误:(./configure:错误:SSL模块需要OpenSSL库。),是因为缺少了OpenSSL,所以我们要先安装一个openssl,执行:yum -y install openssl openssl-devel
    等待OpenSSL的安装完成后,再执行./configure --with-http_ssl_module
  • 安装好ssl后执行make命令,不要执行make install(make是用来编译的,而make install是安装,不然整个nginx会被重新覆盖)。
  • 之后在nginx解压目录下,objs文件夹中多了一个nginx的文件,把这个新的nginx文件复制过去覆盖之前的nginx(保险起见先备份一下之前的nginx)。
    cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
    cp objs/nginx /usr/local/nginx/sbin/nginx
  • 最后cd到Nginx安装目录下,查看ssl模块安装是否成功:./sbin/nginx -V
    在这里插入图片描述
posted @ 2021-02-03 16:42  貂上蝉  阅读(1496)  评论(0编辑  收藏  举报