让web应用使用https进行访问

背景

在网络安全的大背景下,我们公司终于决定升级官网访问,采用https代替http,本文存在三种部署方案,第一种是spring boot项目使用内带tomcat, 第二种是使用nginx部署的项目,第三种使用iis部署的项目。

  1. 首先是生成证书,这个可以去各个证书网站购买,本文不讲如何购买,如果我们需要测试的话我们可以在服务器上使用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;
}

}
  1. 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绝对路径;
        }
  1. 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,我们都需要写重定向,这个大家就百度吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章