http与https操作

3 篇文章 0 订阅

keytool常用命令

-genkey      在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书

(在没有指定生成位置的情况下,keystore会存在用户系统默认目录,如:对于window xp系统,会生成在系统的C:/Documents and Settings/UserName/文件名为“.keystore”)

-alias       产生别名

-keystore    指定密钥库的名称(产生的各类信息将不在.keystore文件中)

-keyalg      指定密钥的算法(如 RSA  DSA(如果不指定默认采用DSA))

-validity    指定创建的证书有效期多少天

-keysize     指定密钥长度

-storepass   指定密钥库的密码(获取keystore信息所需的密码)

-keypass     指定别名条目的密码(私钥的密码)

-dname       指定证书拥有者信息 例如:  "CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码"

-list        显示密钥库中的证书信息keytool-list -v -keystore 指定keystore -storepass 密码

-v           显示密钥库中的证书详细信息

-export      将别名指定的证书导出到文件keytool-export -alias 需要导出的别名 -keystore 指定keystore -file 指定导出的证书位置及证书名称 -storepass 密码

-file        参数指定导出到文件的文件名

-delete      删除密钥库中某条目keytool-delete -alias 指定需删除的别  -keystore 指定keystore  -storepass 密码

-printcert   查看导出的证书信息keytool-printcert -file yushan.crt

-keypasswd   修改密钥库中指定条目口令keytool-keypasswd -alias 需修改的别名 -keypass 旧密码 -new  新密码  -storepass keystore密码  -keystore sage

-storepasswd 修改keystore口令keytool-storepasswd -keystore e:/yushan.keystore(需修改口令的keystore) -storepass 123456(原始密码) -new yushan(新密码)

-import      将已签名数字证书导入密钥库keytool-import -alias 指定导入条目的别名 -keystore 指定keystore -file 需导入的证书

 

通过keytool生成keystore

找到jdk下的bin目录,通过powershell执行命令,并填写相关信息(这里设置别名是brucemall,秘钥密码与store密码为123456,域名是localhost)

.\keytool.exe -genkeypair -alias brucemall-alias -keypass 123456 -keyalg RSA -validity 365 -keystore E:\Bruce\Bruce\keytool_key\brucemall-alias.keystore -storepass 123456 -ext san=dns:localhost

 

查看keystore

命令:

 .\keytool.exe -list -v -keystore E:\Bruce\Bruce\keytool_key\brucemall-alias.keystore

命令:

.\keytool.exe -list -rfc -keystore E:\Bruce\Bruce\keytool_key\brucemall-alias.keystore

配置到SpringBoot项目中

新建SpringBoot项目,将生成的brucemall-alias.keystore文件放到resources目录下,修改application.yaml,添加ssl配置

这时候直接通过http来访问则无法访问项目中的controller

将http改成https后,则看到提示为不安全的链接,忽略后则可以访问(但是目前是提示此为不安全的链接,需要去除)

 

导出证书

因为浏览器提示是不安全的链接,所以需要将证书添加到浏览器,下面先导出证书,在powershell执行命令

.\keytool.exe -exportcert -alias brucemall-alias -keystore E:\Bruce\Bruce\keytool_key\brucemall-alias.keystore -file E:\Bruce\Bruce\keytool_key\brucemall-alias.cer

双击 cer文件安装证书

安装完之后重启服务器,再次通过https访问,就不会再提示是不安全的链接了

将http转换到https

将秘钥放到工程中的方式

当访问百度的时候,在地址栏输入www.baidu.com,其实访问的http://www.baidu.com/,但是会自动切换到https://www.baidu.com/,要实现这种功能,先在application.yaml中添加配置

再在controller包下新建类HttpToHttps,内容如下

import org.apache.catalina.Context;

import org.apache.catalina.connector.Connector;

import org.apache.tomcat.util.descriptor.web.SecurityCollection;

import org.apache.tomcat.util.descriptor.web.SecurityConstraint;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

/**

* http强制跳转https

*/

@Configuration

public class HttpToHttps {

// https的端口

    @Value("${server.port}")

private int sslPort;

// http的端口    对应application.yaml中配置的 http-port

    @Value("${http-port}")

private int httpPort;

@Bean

    public TomcatServletWebServerFactory servletContainerFactory() {

TomcatServletWebServerFactory tomcat =new TomcatServletWebServerFactory() {

@Override

            protected void postProcessContext(Context context) {

//设置安全性约束

                SecurityConstraint securityConstraint =new SecurityConstraint();

securityConstraint.setUserConstraint("CONFIDENTIAL");

//设置约束条件

                SecurityCollection collection =new SecurityCollection();

//拦截所有请求

                collection.addPattern("/*");

securityConstraint.addCollection(collection);

context.addConstraint(securityConstraint);

}

};

Connector connector =new Connector("org.apache.coyote.http11.Http11NioProtocol");

//遇到http进行转发

        connector.setScheme("http");

//true: http使用http, https使用https;

        //false: http重定向到https;

        connector.setSecure(false);

// 设置http端口

        connector.setPort(httpPort);

//重定向端口号(非SSL到SSL)

        connector.setRedirectPort(sslPort);

tomcat.addAdditionalTomcatConnectors(connector);

return tomcat;

}

}

这时候再重启服务器,并通过http的方式请求

http://localhost:82/test/hello

会这里会发现他会自动跳转成

https://localhost:81/test/hello

将秘钥配置到nginx中

在电脑上新建一个目录openssl(随便取名字),打开powershell,进入openssl目录后,使用openssl命令生成key

openssl genrsa -des3 -out brucemall.key 1024

在此过程中会提示你输入密码,输入两次即可,这时候在openssl目录下生成了key

再通过openssl命令,生成csr文件

openssl req -new -key brucemall.key -out brucemall.csr

 

重命名key文件为brucemall.key.src,因为目前的key每次需要输入密码,所以通过命令重新生成一个免密的key

openssl rsa -in .\brucemall.key.src -out .\brucemall.key

执行命令的后,需要输入一次之前设置的key的密码,之后就重新生成了brucemall.key,则类似保存了密码,以后可以不用每次再输入密码了

 

通过命令,生成crt文件

openssl x509 -req -days 365 -in .\brucemall.csr -signkey .\brucemall.key -out .\brucemall.crt

Nginx修改配置文件nginx.conf

在http{}中增加转发

upstream tomcats {

    server 192.168.0.222:8080;                                                   #这里指定应用的访问路径

}

取消# HTTPS server下的注释

    server {

        listen      443 ssl;

        server_name  localhost;

        ssl_certificate      /root/nginx_key/brucemall.crt;              #这里指定生成的路径

        ssl_certificate_key  /root/nginx_key/brucemall.key;        #这里指定生成的路径

        ssl_session_cache    shared:SSL:1m;

        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;

        ssl_prefer_server_ciphers  on;

        location / {

            # root  html;

            # index  index.html index.htm;

            proxy_pass http://tomcats;                                             #这里指定配置的 upstream

        }

    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值