zoukankan      html  css  js  c++  java
  • 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
      在这里插入图片描述
  • 相关阅读:
    my97date与struts2的结合使用
    window.frames["detailFrm"].isSubmitting = true;//?起什么作用
    apache ant
    JodaTime 简介
    dbgrid中没有数据原因1
    网页 BODY的topMargin 和leftMargin
    在java类中定义log
    discuz论坛移动后,如果不能连接上数据库。可能是连接数据库的用户密码不正确。
    在后台对字符串进行转码
    [转] 我们的企业比日本少了什么
  • 原文地址:https://www.cnblogs.com/congyiblog/p/14367726.html
Copyright © 2011-2022 走看看