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
}
}
网友评论