0


局域网搭建SSL,使用HTTPS服务教程

局域网搭建SSL,使用HTTPS服务教程

1 相关证书文件格式

1.1 .csr(证书请求文件)

.csr 是证书请求文件(certificate signing request),是由 RFC 2986定义的PKCS10格式,包含部分/全部的请求证书的信息,比如,主题, 机构,国家等,并且包含了请求证书的公玥,这些被CA中心签名后返回一张证书。返回的证书是公钥证书(只包含公玥不含私钥)

1.2 .pem(容器格式,证书的加密格式)

.pem 是一种容器格式,可能仅包含公钥证书,也可以包含完整的证书链(包括公玥,私钥,和根证书)。也可能用来编码 CSR文件。

1.3 .key(私钥文件,私钥的加密格式)

.key 其实就是一个pem格式只包含私玥的文件,.key 作为文件名只是作为一个明显的别名。

pem和key 这两种格式 分别存储的是证书base64加密和私钥base64加密还有格式分割符,也就是说pem存的是证书,key 存的是私钥

1.4 .pkcs12 .pfx .p12(公私钥、证书)

pkcs即 RSA定义的 公玥密码学( Public-Key Cryptography Standards)标准,有多个标准 pkcs12只是其一,是描述个人信息交换语法标准。 有的文件直接使用其作为文件后缀名。这种文件包含公钥和私钥证书对,跟pem文件不同的是,它的内容是完全加密的。 用openssl可以把其转换成包含公玥和私玥的 .pem 文件。命令: openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes

1.5 .der(一种编码方案)

其实der不是一种文件格式。der 是ASN.1 众多编码方案中的一个,使用der编码方案编码的pem文件。der 编码是使用二进制编码,一般pem文件使用的是base64进行编码,所以完全可以把der编码的文件转换成pem文件,命令: openssl x509 -inform der -in to-convert.der -out converted.pem 使用der编码的pem文件,后缀名可以为.der,也可以为以下格式:

1.6 .cert .cer .crt(证书)

pem或者der编码格式的证书文件,这些文件后缀名都会被windows 资源管理器认为是证书文件。有趣的是, .pem 反而不会被认为是证书文件。

1.7 .crl(证书吊销列表)

certificate revocation list,证书吊销列表

在这里插入图片描述

2 实战(SpringBoot+tomcat)

2.1 创建证书

jdk自带的keytool可以帮助我们生成证书

  1. win+R输入cmd打开命令行
keytool -genkey -alias tomcat -storetype PKCS12-keyalg RSA-keysize 2048-keystore keyword.p12 -validity 3650

输入密码(

密码是隐藏的,直接输入即可

),剩下的可以不输,直接全部回车,执行完之后会在当前文件夹内生成一个keyword.p12的文件
在这里插入图片描述

2.2 拷贝证书到项目,并配置

  1. 拷贝证书到resources目录下在这里插入图片描述
  2. 在pom.xml中进行配置

放到<build>标签下

<resources><resource><directory>src/main/resources</directory><filtering>true</filtering><excludes><exclude>**/*.p12</exclude>
        </excludes>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering>
        <includes>
            <include>**/*.p12</include></includes></resource></resources>
  1. 配置application.properties
#SSL
server.ssl.key-store=classpath:keyword.p12
server.ssl.key-store-password=cmd窗口时设置的密钥库口令
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias=tomcat

2.3 添加配置类,重定向将http转为https

  1. 在application.properties中添加配置
http.port=8080
server.port=8090

在这里插入图片描述
2. 添加配置类

@ConfigurationpublicclassHttpToHttpsConfigextendsWebMvcConfigurerAdapter{@Value("${server.port}")privateint serverPort;@Value("${http.port}")privateint serverHttpPort;/**
     * 解决跨域问题
     * @param registry
     */@OverridepublicvoidaddCorsMappings(CorsRegistry registry){
        registry.addMapping("/**")// 设置允许跨域请求的域名//                .allowedOrigins("*")    // 注意此处,当allowCredentials为ture时候,此处不能有*.allowedOriginPatterns("/**")//是否允许证书.allowCredentials(true).allowedOrigins("*").allowedMethods("GET","POST","OPTIONS","PUT").allowedHeaders("Content-Type","X-Requested-With","accept","Origin","Access-Control-Request-Method","Access-Control-Request-Headers","accessToken").exposedHeaders("Access-Control-Allow-Origin","Access-Control-Allow-Credentials").maxAge(3600);}@BeanpublicServletWebServerFactoryservletContainer(){TomcatServletWebServerFactory tomcat =newTomcatServletWebServerFactory(){@OverrideprotectedvoidpostProcessContext(Context context){SecurityConstraint securityConstraint =newSecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");SecurityCollection collection =newSecurityCollection();
                collection.addPattern("/*");
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);}};

        tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());return tomcat;}privateConnectorinitiateHttpConnector(){Connector connector =newConnector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");//需要重定向的http端口
        connector.setPort(serverHttpPort);
        connector.setSecure(false);//设置重定向到https端口
        connector.setRedirectPort(serverPort);return connector;}}

2.4 测试效果

  1. 编写一个简单的controller
@RestControllerpublicclassTestController{@GetMapping("/test")publicStringtestHttps(){return"success...";}}
  1. 浏览器输入url,回车,查看结果
http://localhost:8080/test

在这里插入图片描述

3 Nginx搭建https服务(linux)

3.1 安装Nginx

搭建nginx之前,我们需要先让linux服务器上有nginx

# 查看当前电脑上是否有nginx
find /-name "nginx"

如果没有,可通过以下步骤来安装nginx:

nginx安装的时候不指定安装目录,会默认安装到/usr/local/nginx下

  1. 安装所需依赖
yum -yinstall gcc zlib zlib-devel pcre-devel openssl openssl-devel
  1. 下载nginx
mkdir /temp
cd /tmp/
wget http://nginx.org/download/nginx-1.13.7.tar.gz
  1. 解压nginx
tar-xvf nginx-1.13.7.tar.gz
  1. 创建目标文件夹
mkdir-p /usr/zi/nginx
  1. 进入压缩包所在路径,并指定编译路径
cd /tmp/nginx-1.13.7
./configure --prefix=/usr/zi/nginx
make&&makeinstall

此时在/usr/zi/nginx下将会生成conf、sbin等文件夹

  1. 指定配置文件
/usr/zi/nginx/sbin/nginx -c /usr/zi/nginx/conf/nginx.conf
  1. 关闭防火墙
systemctl stop firewalld

# 关闭防火墙开机自启动
systemctl disable firewalld
  1. 启动nginx
/usr/zi/nginx/sbin/nginx -s reload

如果出现:nginx: [error] invalid PID number “” in “/usr/zi/nginx/logs/nginx.pid”,指定配置文件路径,然后重启nginx

# 指定nginx配置文件路径
/usr/zi/nginx/sbin/nginx -c /usr/zi/nginx/conf/nginx.conf
 
# 重启nginx
./nginx -s reload
  1. 在浏览器直接输入自己的ip,回车,出现Welcome to nginx!则表示nginx运行成功

3.2 nginx添加SSL模块

在添加模块之前,首先查看nginx是否有SSL模块

# 进入nginx的sbin目录(根据自己的位置,修改路径)cd /usr/zi/nginx/sbin

# 查看是否有ssL模块【注意,是大写的V,小写的是显示版本号】
./nginx -V

如果出现 (configure arguments: --with-http_ssl_module), 则已安装,否则需要执行下面命令安装SSL

在这里插入图片描述

可以看到,当前我的nginx是不存在SSL模块的,下面我将安装SSL模块。
①进入nginx源码所在位置(nginx解压缩的目录),我的是在

/tmp/nginx-1.13.7
./configure --prefix=/usr/zi/nginx --with-http_stub_status_module --with-http_ssl_module

②执行make,重新,

切记不要执行make install,否则会重新安装
make

执行结束后,在nginx的解压缩目录(我的是在

/temp/nginx-1.13.7

)将会出现

objs

文件夹,文件夹内存在nginx文件

在这里插入图片描述

在这里插入图片描述

③替换sbin目录

接下来使用新的nginx文件替换掉之前安装目录sbin下的nginx,注意这里的替换的时候可以先将之前的文件备份下,停掉nginx服务

# 进入nginx的sbin目录cd /usr/zi/nginx/nginx

# 停止服务
./nginx -s stop

# 替换sbin目录cp /temp/nginx-1.13.7/objs/nginx /usr/zi/nginx/sbin

④进入nginx安装目录,查看结果

cd /usr/zi/nginx/sbin

#注意这里是大写的V,小写的只显示版本号
./nginx -V#出现了configure arguments: --with-http_ssl_module 证明已经安装成功

在这里插入图片描述

3.3 给nginx配置SSL证书

①创建证书,并上传

  • 拥有ssl证书,没有的可以去阿里购买或者免费申请一年【这里是内网环境,因此我们可以本地生成证书】
  • 解压缩下载好的证书(证书一般是pem文件和key文件,这里名字可以随便改)
  • 将下载好的证书上上传到服务器,我将证书放在了root目录下的card文件夹
jdk中内置了一个keytool

JDK里面内置了一个数字证书生产工具:keytool。但是这个工具只能生成自签名的数字证书。所谓自签名就是指证书只能保证自己是完整的,没有经过非法修改的。但是无法保证这个证书是属于谁的(一句话:keytool没办法签发证书,而openssl能够进行签发和证书链的管理)

我们可以在本地下载一个

openssl

工具:下载地址
在这里插入图片描述
下载完之后,进入安装目录的bin路径,便可以使用,当然也可以配置好环境变量,更方便。

②配置nginx的conf文件

参考文章:
https://blog.csdn.net/jasstool/article/details/98627062
https://blog.csdn.net/HD243608836/article/details/127441701
https://blog.csdn.net/xkdlzy/article/details/113380587
https://www.cnblogs.com/ambition26/p/14077773.html

标签: ssl https 网络协议

本文转载自: https://blog.csdn.net/weixin_45565886/article/details/128937890
版权归原作者 NPE~ 所有, 如有侵权,请联系我们删除。

“局域网搭建SSL,使用HTTPS服务教程”的评论:

还没有评论