keytool生成证书_Spring boot with Oauth2 jwt (非对称证书)

904fffbb0eaf31221cd58724cfe7e895.png

Spring boot with Oauth2 jwt 非对称证书

节选自《Netkiller Spring Cloud 手札》

多维度架构 - 知乎​www.zhihu.com
5c5888a721a32faf96488d04b9cd138b.png

创建证书

创建证书

keytool -genkeypair -alias jwt -keyalg RSA -keypass passw0rd -keystore jwt.jks -storepass passw0rd

neo@MacBook-Pro /tmp/oauth % keytool -genkeypair -alias jwt -keyalg RSA -keypass passw0rd -keystore jwt.jks -storepass passw0rd
What is your first and last name?
 [Unknown]: Neo Chen
What is the name of your organizational unit?
 [Unknown]: netkiller.cn
What is the name of your organization?
 [Unknown]: netkiller.cn
What is the name of your City or Locality?
 [Unknown]: Shenzhen
What is the name of your State or Province?
 [Unknown]: Guangdong
What is the two-letter country code for this unit?
 [Unknown]: CN
Is CN=Neo Chen, OU=netkiller.cn, O=netkiller.cn, L=Shenzhen, ST=Guangdong, C=CN correct?
 [no]: yes 

该命令将生成一个名为jwt.jks的文件,其中包含我们的密钥 - 公钥和私钥。 还要牢记keypass和storepass密码。

导出公钥,接下来,我们需要从刚刚生成的JKS中导出我们的公钥,我们可以使用下面的命令来实现:

neo@MacBook-Pro /tmp/oauth % keytool -list -rfc --keystore jwt.jks | openssl x509 -inform pem -pubkey -out certificate.crt > public.crt

Enter keystore password: passw0rd

公钥内容

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAj6ePdDwBrHKX3kNFnbve
T1rTTbyA9GjaiZNwj2X4Y0In7RCFl8auXXBn2DxztQMGqHY2Ydc3/26Gu9Vri441
r8/RInA6UpzzDRl5SeYYTobcgfIVpfQ0hTX0xzuMDVLVoLibGfcvGy7ZkrJjQFX8
lIaO84K8KP/yzma5622XJ+f5hkXmTX5e0tXGDCPjVO1dSrouPWqhcbM0Kf6y3RdE
JkNRTHLky6afx8MNobakz1Ab9K7cjD8De6LwScwMQMFU46traN/3Fw0lZFxKkpay
+sEUHvHDUYWTuVovUmfiKMX8fj5QCm4imPdA3pF/jjM+xeeVcTID3qffDGOKrGTF
HQIDAQAB
-----END PUBLIC KEY----- 

复制 jwt.jks 和 public.crt 到 src/main/resources 目录下

Authorization Server

 @Bean
 public JwtAccessTokenConverter accessTokenConverter() {
 JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
 KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(new ClassPathResource("jwt.jks"), "passw0rd".toCharArray());
 converter.setKeyPair(keyStoreKeyFactory.getKeyPair("passw0rd"));
 return converter;
 }  

Resource Server

 @Bean
 public JwtAccessTokenConverter accessTokenConverter() {
 JwtAccessTokenConverter converter = new JwtAccessTokenConverter();

 String publicKey = "-----BEGIN PUBLIC KEY-----n" + 
 "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAj6ePdDwBrHKX3kNFnbven" + 
 "T1rTTbyA9GjaiZNwj2X4Y0In7RCFl8auXXBn2DxztQMGqHY2Ydc3/26Gu9Vri441n" + 
 "r8/RInA6UpzzDRl5SeYYTobcgfIVpfQ0hTX0xzuMDVLVoLibGfcvGy7ZkrJjQFX8n" + 
 "lIaO84K8KP/yzma5622XJ+f5hkXmTX5e0tXGDCPjVO1dSrouPWqhcbM0Kf6y3RdEn" + 
 "JkNRTHLky6afx8MNobakz1Ab9K7cjD8De6LwScwMQMFU46traN/3Fw0lZFxKkpayn" + 
 "+sEUHvHDUYWTuVovUmfiKMX8fj5QCm4imPdA3pF/jjM+xeeVcTID3qffDGOKrGTFn" + 
 "HQIDAQABn" + 
 "-----END PUBLIC KEY-----";

 converter.setVerifierKey(publicKey);
 return converter;
 } 
netkiller:Spring boot with Oauth2 - jwt​zhuanlan.zhihu.com
af458864ac94931cc3b673d6bdab06e1.png
netkiller:Spring boot with Oauth2 - RestTemplate​zhuanlan.zhihu.com
af458864ac94931cc3b673d6bdab06e1.png
netkiller:Spring boot with Oauth2 - Password​zhuanlan.zhihu.com
af458864ac94931cc3b673d6bdab06e1.png
netkiller:Spring Data with JdbcTemplate​zhuanlan.zhihu.com
af458864ac94931cc3b673d6bdab06e1.png
netkiller:Spring Data with MySQL (增删插改)​zhuanlan.zhihu.com
af458864ac94931cc3b673d6bdab06e1.png
netkiller:Spring Data with MySQL (实体关系)​zhuanlan.zhihu.com
af458864ac94931cc3b673d6bdab06e1.png
netkiller:Spring Data with MySQL (索引)​zhuanlan.zhihu.com
af458864ac94931cc3b673d6bdab06e1.png
netkiller:Spring Data with MySQL (实体定义)​zhuanlan.zhihu.com
af458864ac94931cc3b673d6bdab06e1.png
netkiller:Spring Data with MongoDB (四)​zhuanlan.zhihu.com
af458864ac94931cc3b673d6bdab06e1.png
netkiller:Spring Data with MongoDB (三)​zhuanlan.zhihu.com
af458864ac94931cc3b673d6bdab06e1.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值