SpringBoot项目配置HTTPS接口的安全访问(openssl配置)

参考:

https://blog.csdn.net/weixin_45355769/article/details/131727935

安装好openssl后,

创建 D:\certificate

CA文件夹下包含:

  • index.txt OpenSSL在创建自签证书时会向该文件里写下索引
  • database.txt OpenSSL会模拟数据库将一些敏感信息写在该文件里
  • serial 创建该文件后,请编辑在第一行写下 01 (注意,没有后缀)
  • newcerts 文件夹

注意: 这里提到的所有文件必须补齐,并且文件名不得更改 !
再注:在windows,没有openssl.conf默认文件夹的位置,所以需要自己配置环境变量。

1.3 生成自己的CA证书
首先,我们需要把自己先扮演成CA机构,根据非对称加密的概念,我们需要有一对密钥,对应一把公钥和一把私钥,私钥放在自己身边,公钥提供出去,这边需要注意的是不能把他看成是服务端,CA机构是在客户端和服务端两者之间的一个存在,这边理解了后,我们先来创建一把私钥,可以使用openssl来生成。

1.3.1 生成 rootca.key私钥文件

openssl genrsa -out rootca.key 4096

1.3.2 根据私钥文件生成req请求文件,req请求文件用来生成证书的时候使用

如果是自己使用,搭建着玩或者自己私人的网站,就使用openssl生成就好了。

1.3.3 生成X.509格式的CA根证书rootca.crt

openssl x509 -req -in rootca.csr -out rootca.crt -signkey rootca.key -days 36500

这个证书就是CA机构会预先在客户端中的受信任列表中埋下的根证书,其中包括了证书的所有者信息和公钥信息,有了这些信息,客户端就能通过这些信息来验证服务端返回的CA证书的合法性了。

mmc

1.4 CA机构给自己颁发证书:生成服务端证书
1.4.1 生成服务器私钥文件server1.key

openssl genrsa -des3 -out server1.key 4096

输入 PEM pass

1.4.2 创建请求文件,然后输入信息。

openssl req -new -key server1.key -out server1.csr

1.4.3 使用根证书签发证书

openssl x509 -req -in server1.csr -CA rootca.crt -CAkey rootca.key -CAcreateserial -out server1.crt -days 36500

1.4.4 配置-extensions和-extfile扩展字段防止浏览器检查失败

ssl.conf

[req_ext]
subjectAltName = @alt_names

[alt_names]
IP.1    = 192.168.1.80
IP.2    = 127.0.0.1
IP.3    = 192.168.1.249
DNS.1   = localhost
#DNS.2   = localhost

配置片段是用于SSL证书配置中的一个部分,它通常用于定义subjectAltName扩展项的值。这部分内容通常会包含在一个 OpenSSL 配置文件中,用于生成或签署证书请求(CSR)或直接生成自签名证书。

在这个例子中:

  • [req_ext] 部分指定了请求扩展(request extensions),这些是在证书请求中或最终证书里需要包含的额外属性。
  • subjectAltName = @alt_names 指示使用名为 alt_names 的替代名称集。@ 符号是用来引用一个之前定义的命名段,在这个情况下就是下面定义的 [alt_names]
  • [alt_names] 部分列出了具体的替代名称条目,包括IP地址和DNS名称。这允许证书被用于多个不同的主机名或IP地址,提高了灵活性。

具体来说,你配置了以下替代名称:

  • 三个IP地址:192.168.1.80、127.0.0.1、192.168.1.249
  • 一个DNS名称:localhost
  • 还有一个DNS.2被注释掉了,这意味着如果需要可以取消注释来包含另一个DNS名称。

此配置有助于确保生成的证书能够适用于列出的所有网络标识,无论是通过IP还是DNS访问。这对于那些需要在多个地址上验证服务身份的场景特别有用,比如配置HTTPS网站或安全的API服务等。


 

  1. 带上配置文件,执行签发命令

openssl x509 -req -in server1.csr -CA rootca.crt -CAkey rootca.key -CAcreateserial -out server2.crt -days 36500 -extensions req_ext -extfile ssl.conf

创建完毕!

修改IP后

执行

openssl x509 -req -in server1.csr -CA rootca.crt -CAkey rootca.key -CAcreateserial -out server2.crt -days 36500 -extensions req_ext -extfile ssl.conf

再执行下面的操作:

-----------------------------------------------------------------------------------------------

3. spring boot配置ssl证书实现https

2.1 配置证书

在java环境中用的证书形式有p12格式的,jks格式的,所以需要做转换,以p12为例

 openssl pkcs12 -export -clcerts -in server1.crt -inkey server1.key -out server2.p12

首先用命令查询一下别名:

keytool -list -v -keystore server2.p12

2.2 添加到springboot项目中

把server2.p12复制到spring boot的 src/main/resources/ 目录下,和application.yaml平级

2.3 配置文件


可以访问了。  

-----------------------------------------------------------------------------------------

将所有HTTP请求重定向到HTTPS

package com.zbIntel.integration.config;

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.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HttpsConfig {
    @Value("${server.port}")
    private int httpsPort;
    @Value("${http.port}")
    private int httpPort;
    @Bean
    public ServletWebServerFactory servletContainer() {
        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);
            }
        };
        // 添加HTTP连接器
        tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());
        return tomcat;
    }
    // 初始化HTTP连接器
    private Connector initiateHttpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(httpPort);
        connector.setSecure(false);
        connector.setRedirectPort(httpsPort);
        return connector;
    }
}

----------------------------------------------------------------

后面443端口让给 其他服务 只需修改 端口为8443 即可:

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Springboot 项目可以使用 Maven 引入 spring-boot-starter-tomcat 依赖来配置 OpenSSL,在 application.properties 文件中添加以下属性: server.ssl.key-store-type=PKCS12 server.ssl.key-store=classpath:keystore.p12 server.ssl.key-store-password=changeit server.ssl.key-alias=tomcat ### 回答2: 在Spring Boot项目配置OpenSSL可以通过以下步骤完成: 步骤1:安装OpenSSL工具 首先,您需要在计算机上安装OpenSSL工具。您可以从OpenSSL官方网站下载并安装适合您操作系统的版本。 步骤2:生成自签名证书 在安装完OpenSSL后,打开终端或命令提示符,进入OpenSSL安装目录的bin文件夹。使用以下命令生成自签名证书: openssl req -new -newkey rsa:2048 -nodes -keyout key.pem -out csr.pem 该命令将生成一个私钥文件(key.pem)和一个证书请求文件(csr.pem)。在生成过程中,您需要输入有关组织和站点的信息。 步骤3:生成自签名证书 执行以下命令将自签名证书转换为可导入的格式: openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out server.crt 该命令将生成一个证书文件(server.crt),其有效期为365天。 步骤4:配置Spring Boot项目中的OpenSSL 在Spring Boot项目中,您可以在application.properties或application.yml文件中进行OpenSSL配置。下面是基于application.properties文件的配置示例: # 配置HTTPS协议端口 server.port=8443 # 配置SSL/TLS相关属性 server.ssl.key-store=classpath:keystore.p12 server.ssl.key-store-password=storepass server.ssl.key-password=keypass server.ssl.keyAlias=alias # 配置重定向HTTP请求到HTTPS server.redirect-context=/redirect server.redirect-https=true 在以上示例中,您需要做以下更改: - 将“keystore.p12”替换为您生成的自签名证书文件(server.crt)和私钥文件(key.pem)的路径。 - 将“storepass”和“keypass”分别替换为您设置的密钥库密码和密钥密码。 - 将“alias”替换为您设置的密钥别名。 通过以上配置,您的Spring Boot项目将使用OpenSSL启用HTTPS协议并支持自签名证书。 请注意,自签名证书仅用于开发和测试目的,不建议在生产环境中使用。在生产环境中,建议使用由受信任的证书颁发机构(CA)签署的正式证书。 ### 回答3: 要在Spring Boot项目配置OpenSSL,可以按照以下步骤进行操作: 1. 第一步是安装OpenSSL。可以从OpenSSL官方网站(https://www.openssl.org/)下载适合您操作系统的安装包,然后按照安装向导进行安装。 2. 安装完OpenSSL后,将OpenSSL的路径添加到系统的环境变量中。这样,您就可以在任何位置访问OpenSSL的命令。 3. 打开命令行工具,进入您的项目目录。然后,执行以下命令来生成一个自签名证书: openssl req -new -newkey rsa:2048 -nodes -keyout key.pem -out csr.pem 4. 在执行上述命令后,会生成两个文件:key.pem(私钥)和csr.pem(证书签名请求)。将这两个文件保存在您的项目目录中。 5. 在Spring Boot项目配置文件(如application.properties或application.yml)中配置SSL相关的属性。示例配置如下: server.port=8443 server.ssl.key-store-type=PKCS12 server.ssl.key-store=classpath:keystore.p12 server.ssl.key-store-password=changeit 上述示例配置了使用端口为8443,并使用了一个名为keystore.p12的密钥库文件来存储证书和私钥。您需要根据您生成的key.pem和csr.pem文件自行生成此密钥库文件,并将其放在项目的classpath下。还需要设置密钥库文件的密码。 6. 保存并关闭配置文件。重新启动您的Spring Boot应用程序,应该能够看到在https://localhost:8443/ 上运行。 这样,您就成功地在Spring Boot项目配置OpenSSL。通过使用自签名证书,您可以在开发和测试过程中使用SSL加密来确保数据的安全传输。请注意,在生产环境中,您需要购买和配置由受信任的证书颁发机构(CA)签发的有效SSL证书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值