整体目录
1. 生成SSL证书
首先,使用keytool
生成一个自签名证书。打开命令行工具并运行以下命令:
keytool -genkeypair -alias myserver -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365
这将创建一个名为keystore.jks
的文件,其中包含一个自签名的证书。你将被要求输入一些信息,如密码、名字等。
2. 配置Spring Boot应用以使用HTTPS
在你的Spring Boot项目中,将生成的keystore.jks
文件放在src/main/resources
目录下。然后,在application.properties
文件中添加以下配置:
server.port=8443
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password=your_keystore_password
server.ssl.key-password=your_key_password
server.ssl.key-store-type=JKS
请确保将your_keystore_password
和your_key_password
替换为你在生成密钥库时使用的密码。
server.port=8443
server.ssl.key-store=classpath:mykeystore.jks
#JKS类型-storepass参数值,P12和key password一样
server.ssl.key-store-password= changeit
server.ssl.key-password=test123456
#PKCS12 或者JKS
server.ssl.key-store-type=JKS
#server.ssl.key-store-type=PKCS12
3. 编写控制器
创建一个简单的REST控制器来测试HTTPS服务。
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author: jg
* @date: 2024-11-14
* @description:
*/
@RestController
@RequestMapping("/https")
public class HttpsController {
@GetMapping
public String test(){
return "https 测试方法";
}
}
4. 启动Spring Boot应用
确保你的Spring Boot主类位于正确的包结构中,并且包含@SpringBootApplication
注解。例如:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author: jg
* @date: 2024-11-14
* @description:
*/
@SpringBootApplication
public class HttpsDemoApplication {
public static void main(String[] args) {
SpringApplication.run(HttpsDemoApplication.class,args);
}
}
5.测试
postman
设置File->Settings
curl命令
curl -k https://172.30.4.81:8443/https
keytool生成证书
PKCS12
1.生成一个新的私钥和证书请求 (CSR)
首先,你需要生成一个新的私钥和证书签名请求 (CSR)。
keytool -genkeypair -alias myalias -keyalg RSA -keysize 2048 -validity 365 -keystore mykeystore.p12 -storetype PKCS12 -dname "CN=example.com, OU=IT, O=MyOrg, L=City, ST=State, C=Country" -ext SAN=dns:example.com,dns:www.example.com,ip:192.168.1.1
在这个命令中:
-alias myalias
指定别名。-keyalg RSA
指定使用的算法。-keysize 2048
指定密钥大小。-validity 365
指定证书有效期为365天。-keystore mykeystore.p12
指定密钥库文件名。-storetype PKCS12
指定密钥库类型为 PKCS12。-dname "CN=example.com, OU=IT, O=MyOrg, L=City, ST=State, C=Country"
指定证书的 Distinguished Name (DN)。-ext SAN=dns:example.com,dns:www.example.com
添加 SAN 扩展,包含多个域名。
2. 导入证书到密钥库
如果你已经有一个现有的证书,并且想要将其导入到新的 PKCS12 密钥库中,可以使用以下命令:
keytool -importcert -file mycertificate.crt -alias myalias -keystore mykeystore.p12 -storetype PKCS12
在这个命令中:
-file mycertificate.crt
指定要导入的证书文件。-alias myalias
指定别名。-keystore mykeystore.p12
指定密钥库文件名。-storetype PKCS12
指定密钥库类型为 PKCS12。
3. 验证密钥库内容
你可以使用以下命令来查看密钥库中的条目,确保它们已正确导入:
keytool -list -v -keystore mykeystore.p12 -storetype PKCS12
这个命令会显示密钥库中的所有条目及其详细信息,包括 SAN 信息。
4. 配置 Spring Boot 使用 PKCS12 密钥库
在 Spring Boot 配置文件中,更新你的 SSL 配置以使用新的 PKCS12 密钥库:
application.properties
server.ssl.key-store=classpath:mykeystore.p12
server.ssl.key-store-password=yourpassword
server.ssl.key-alias=myalias
server.ssl.key-store-type=PKCS12
JKS
使用 keytool
生成证书的步骤如下:
-
生成密钥对和证书签名请求 (CSR):
keytool -genkeypair -alias myalias -keyalg RSA -keysize 2048 -keystore mykeystore.jks -validity 365 -storepass changeit
如果需要设置SAN
keytool -genkeypair -alias myalias -keyalg RSA -keysize 2048 -keystore mykeystore.jks -validity 365 -storepass changeit -dname "CN=example.com, OU=IT, O=MyOrg, L=City, ST=State, C=Country" -ext SAN=dns:example.com,dns:www.example.com,ip:192.168.1.1
keytool -genkeypair -alias mycert -keyalg RSA -keysize 2048 -validity 365 -dname "CN=172.30.4.81, OU=IT, O=MyOrg, L=City, ST=State, C=Country" -keystore keystore.jks -storepass changeit
-alias myalias
指定别名。-keyalg RSA
指定使用的算法。-keysize 2048
指定密钥大小。-validity 365
指定证书有效期为365天。-keystore mykeystore.jks
指定密钥库文件名。-dname "CN=example.com, OU=IT, O=MyOrg, L=City, ST=State, C=Country"
指定证书的 Distinguished Name (DN)。-ext SAN=dns:example.com,ip:192.168.1.1
添加 SAN 扩展,包含多个域名和一个 IP 地址。
-
导出证书:
keytool -exportcert -alias myalias -keystore mykeystore.jks -file mycert.cer -storepass changeit
-
将证书导入到目标服务器
现在,将生成的证书(mycert.crt)复制到172.30.4.83服务器上,并将其导入到目标服务器的密钥库中。
scp mycert.crt user@172.30.4.83:/path/to/destination
在172.30.4.83服务器上执行以下命令:
keytool -importcert -alias mycert -file /path/to/destination/mycert.crt -keystore keystore.jks -storepass changeit
-
将证书导入到信任库(可选):
keytool -importcert -file mycert.cer -keystore truststore.jks -alias myalias -storepass changeit -noprompt
-
验证密钥库:
keytool -list -v -keystore mykeystore.jks -storepass changeit
使用keytool将pkcs12文件导出crt证书
keytool -importkeystore -srckeystore yourfile.p12 -srcstoretype pkcs12 -destkeystore temp.jks -deststoretype jks
这里 yourfile.p12
是你的 p12 文件名,temp.jks
是临时生成的 JKS 文件名。
从 JKS 文件中导出证书:
keytool -exportcert -alias <alias> -keystore temp.jks -rfc -file certificate.crt
这里 <alias>
是你在导入 p12 文件时使用的别名,temp.jks
是临时生成的 JKS 文件名,certificate.crt
是输出的 crt 文件名。
openssl将p12文件导出为crt文件
-
使用以下命令将p12文件转换为PEM格式的证书和私钥:
openssl pkcs12 -in yourfile.p12 -out certificate.pem -clcerts -nokeys
这里
yourfile.p12
是你的p12文件名,certificate.pem
是输出的PEM格式证书文件名。 -
如果你只需要导出证书部分,可以使用以下命令从PEM文件中提取证书:
openssl x509 -in certificate.pem -out certificate.crt