美文网首页
http与https操作

http与https操作

作者: 天马行空_9f6e | 来源:发表于2021-05-25 16:34 被阅读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

            }

        }

    相关文章

      网友评论

          本文标题:http与https操作

          本文链接:https://www.haomeiwen.com/subject/yyjxsltx.html