Maison  >  Article  >  Java  >  Comment intégrer https avec Springboot

Comment intégrer https avec Springboot

WBOY
WBOYavant
2023-05-11 09:55:181311parcourir

1 Introduction

HTTP n'est pas sécurisé, nous devons mettre du SSL dessus pour le transformer en HTTPS. Cet article utilisera des exemples pour présenter l'intégration de Springboot dans HTTPS. HTTP是不安全的,我们需要给它套上SSL,让它变成HTTPS。本文章将用实例介绍Springboot整合HTTPS

2 密码学基础

要谈https就要谈Security

2 Bases de la cryptographie

Si vous voulez parler de https, vous devez parler de Sécurité Naturellement, vous devez le faire. pour parler de sécurité ; quand il s’agit de sécurité, il faut en parler. Cela doit impliquer une certaine connaissance de la cryptographie.

2.1 Cryptosystème

    Pour établir un système cryptographique, il doit être composé de cinq espaces, qui sont :
  • Plaintext M : information avant cryptage ou après déchiffrement
  • Ciphertext C : texte en clair après cryptage Information ;
  • Clé K : composée d'une clé de cryptage et d'une clé de décryptage ;
  • Cryptage E : transformation du texte brut en texte chiffré
  • Décryptage D : transformation du texte chiffré en texte brut ;

Comme le montre la figure : Comment intégrer https avec Springboot

2.2 Deux méthodes de cryptage

2.2.1 Cryptage symétrique

Le cryptage symétrique, ou cryptage à clé unique, signifie que la clé de cryptage et la clé de déchiffrement sont identiques (ou Calculez facilement l'un à partir de l'autre) méthode de cryptage.

Les principaux avantages du cryptage symétrique sont : des opérations de cryptage et de décryptage rapides et une grande efficacité ;

Limitations : distribution complexe des clés, gestion difficile des clés, mauvaise ouverture des systèmes de communication sécurisés et des signatures numériques ;

Algorithme représentatif : algorithme DES ; Algorithme AES ;

Un petit exemple

 :

明文为48,加密算法f(x)=8x+71,
则密文C=8*48+71=455
则解密算法为f(x)=(x-71)/8;
则解密后的明文M=(455-71)/8=48;

2.2.2 Cryptage asymétrique

Le cryptage asymétrique signifie que le cryptage et le déchiffrement utilisent respectivement des clés différentes et que la clé de déchiffrement ne peut pas être dérivée de la méthode de cryptage par clé de cryptage.

Principaux avantages : une distribution simple des clés, une gestion facile, une bonne ouverture du système et des signatures numériques peuvent être réalisées ;

Limitations : l'efficacité des opérations de cryptage et de décryptage est faible

Algorithmes représentatifs : algorithme RSA, algorithme ECC

Prendre ; un bon exemple

 :

Les étapes sont les suivantes :RemarqueE * D % φ(N) = 16C =M^ E mod NM = C^D mod N
Étape Description Formule
1 Trouver deux nombres premiers P, Q
2 Calculez le module commun N=P*Q
3 Calculez la fonction d'Euler φ(N) = (P-1)(Q-1)
4 Calculer la clé publique E 1

Cryptage
C : texte chiffré M : texte brut 7 Déchiffrement
C : texte chiffré M : texte brut

其中,公钥=(E , N) ,私钥=(D, N),对外,我们只暴露公钥。

1.找出两个质数
随便找两个质数,我们找P=5,Q=11。

2.计算公共模数
公共模数N=P*Q=5*11=55

3.计算欧拉函数
φ(N) = (P-1)(Q-1)=4*10=40

4.计算公钥E
1 <p>至此,整个非对称加密过程演示了一遍,希望大家能理解,特别是非对称加密,因为<strong>HTTPS</strong>使用的是非对称加密。实际的使用算法更复杂,密钥长度会更大。</p><h3 id="yisu3h-to139">2.3 证书</h3><p>要使用SSL,需要有证书,这个证书文件是包含公钥密钥,也就是非对称加密中要使用的。</p><p>获取证书有两种方式:</p>
  • CA(Certificate Authority)机构获取,即客户端会认可的证书,具有公信力;有免费也有收费的,收费的比较稳定比较安全。

  • 自签证书,自己制作证书,一般用于测试,浏览器不承认。

为方便起见,在本次实例中使用自签证书,两种证书整合过程并无差异。

3 Springboot整合HTTPS

3.1 先让Web跑起来

作为一个Web应用,我们先让它跑起来,然后再整合https

(1)引入Web依赖:

<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-web</artifactid></dependency>

(2)配置端口:

server.port=80

(3)实现Contrlloer

@RestControllerpublic class HelloController {@GetMapping("/hello")public String hello() {return "Welcome to www.pkslow.com";
    }
}

完成上面工作后,启动应用即可。

访问http://localhost/hello 得到下面结果,说明整个Web应用起来了。

Comment intégrer https avec Springboot

3.2 生成密钥文件jks

通过命令行生成密钥文件如下:

keytool -genkey -alias localhost -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -keystore localhost.jks -dname CN=localhost,OU=Test,O=pkslow,L=Guangzhou,C=CN -validity 731 -storepass changeit -keypass changeit

命令行重要参数的意义:

  • alias:密钥别名,可以随便起,不冲突就行;

  • keyalg:加密算法;

  • keysize:密钥长度,2048基本就不可能破解了;

  • keystore:keystore的文件名;

  • dname:这个很关键,特别是CN=后面要按正确的域名来写;

  • validity:cert的有效期;

执行完以上命令后,就会生成localhost.jks文件,把该文件放到classpath下即可,当然也可以放到其它位置,配置文件指定正确即可。

3.3 重新配置并重启

按照实际情况重新配置application.properties文件:

server.port=443server.ssl.enabled=trueserver.ssl.key-store-type=jksserver.ssl.key-store=classpath:localhost.jksserver.ssl.key-store-password=changeitserver.ssl.key-alias=localhost

重启后访问如下:

发现有红色警告,因为这是自签名的cert,并不被Chrome所认可,所以会校验失败。以前的Chrome版本只是警告,但还是可以访问的,现在新版本的已经不能访问了。

通过Postman来访问便可:

Comment intégrer https avec Springboot

3.4 使用PKS12格式

如果想使用PKCS12替换JKS,命令和配置可以参考下面:

生成密钥:

keytool -genkey -alias localhost -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -storetype PKCS12 -keystore localhost.p12 -dname CN=localhost,OU=Test,O=pkslow,L=Guangzhou,C=CN -validity 731 -storepass changeit -keypass changeit

配置文件如下:

server.port=443server.ssl.enabled=trueserver.ssl.key-store-type=PKCS12server.ssl.key-store=classpath:localhost.p12server.ssl.key-store-password=changeitserver.ssl.key-alias=localhost

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer