背景
在网络安全的大背景下,我们公司终于决定升级官网访问,采用https代替http,本文存在三种部署方案,第一种是spring boot项目使用内带tomcat, 第二种是使用nginx部署的项目,第三种使用iis部署的项目。
- 首先是生成证书,这个可以去各个证书网站购买,本文不讲如何购买,如果我们需要测试的话我们可以在服务器上使用openssl生成一个证书,如果是Windows机器上没有openssl命令,下载安装,百度云下载链接提取码:5kjx,下载后安装自不用说,但是得记住安装路径,安装完了记得配置下环境变量。
打开命令行程序cmd(以管理员身份运行),运行以下命令:
1.创建服务器证书密钥文件 server.key:
openssl genrsa -des3 -out server.key 1024
输入密码,确认密码,自己随便定义,但是要记住,后面会用到。
2.创建服务器证书的申请文件 server.csr
openssl req -new -key server.key -out server.csr
输出内容为:
Enter pass phrase for root.key: ← 输入前面创建的密码
Country Name (2 letter code) [AU]:CN ← 国家代号,中国输入CN
State or Province Name (full name) [Some-State]:BeiJing ← 省的全名,拼音
Locality Name (eg, city) []:BeiJing ← 市的全名,拼音
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany Corp. ← 公司英文名
Organizational Unit Name (eg, section) []: ← 可以不输入
Common Name (eg, YOUR name) []: ← 此时不输入
Email Address []:[email protected] ← 电子邮箱,可随意填
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []: ← 可以不输入
An optional company name []: ← 可以不输入
4.备份一份服务器密钥文件
cp server.key server.key.bak
5.去除文件口令
openssl rsa -in server.key -out server.key
6.生成证书文件server.crt
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
这个时候服务器根目录下会生成文件server.key 和 server.crt。
1.spring boot支持https
创建WebSecurityConfig类继承WebMvcConfigurationSupport,创建EmbeddedServletContainerFactory bean
@Configuration
public class WebSecurityConfig extends WebMvcConfigurationSupport {
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
Connector connector = new Connector();
connector.setPort(443);
connector.setSecure(true);
connector.setScheme("https");
connector.setProperty("SSLEnabled", "true");
connector.setProperty("keystoreFile", ”server.crt的绝对路径“);
connector.setProperty("keystorePassword", “你创建server.key时的密码“);
tomcat.addAdditionalTomcatConnectors(connector );
return tomcat;
}
}
- nginx支持https
首先查看nginx是不是有ssl模块,nginx -V,如果没有看到ssl就重新编译。
重新配置
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
重新编译,不需要make install安装。否则会覆盖
make
然后复制sbin目录下的nginx文件替换原来文件,再次查看就可以看到支持了。
然后配置config文件,
##同时支持https和http
server {
listen 80 default backlog=2048;
listen 443 ssl;
server_name xuxiake.com;
root /html/index.html;
ssl_certificate server.crt绝对路径;
ssl_certificate_key server.Key绝对路径;
}
多域名支持
server {
listen 443 ssl;
server_name first.com;
root /html/index.html;
ssl_certificate server.crt绝对路径;
ssl_certificate_key server.Key绝对路径;
}
- iis添加https访问
iis需要.pfx后缀的证书文件,需要使用openssl合成,命令如下,
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
1)在服务器上,单击开始 > 运行 > MMC打开控制台。
2)单击文件 > 添加/删除管理单元打开添加/删除管理单元对话框。
3)在可用的管理单元中单击证书 > 添加 > 计算机账户 > 下一步 > 本地计算机(运行此控制台的计算机) > 完成。
4)单击个人 > 所有任务 > 导入打开证书导入向导对话框。
5)单击浏览导入下载的PFX格式证书文件。一路下一步直到输入密码,输入你创建server.key时的密码
6)勾选根据证书类型,自动选择证书存储并单击下一步完成证书的导入。
7)打开IIS8.0 管理器面板,定位到待部署证书的站点,单击绑定。
8)在网站绑定对话框中单击添加 > 选择https类型 > 端口选择443 > 导入的IIS证书名称 > 确定。
总结
写到最后,我们这么配置后一切是都生效了,但是还有一个问题就是用户直接输入域名,浏览器默认是http的,所以不管是iis还是nginx,我们都需要写重定向,这个大家就百度吧。