jdk自带keytool生成证书

 1、进入jdk安装目录:cd C:\Program Files\Java\jdk1.8.0_291

2、执行命令:

keytool -genkeypair -alias jwt -keyalg RSA -keypass 123456 -keystore f:\black\jwt.jks -storepass 123456

3、备份

keytool -importkeystore -srckeystore f:\black\jwt.jks -destkeystore f:\black\jwt.jks -deststoretype pkcs12

4、 查询证书

keytool -list -keystore f:\black\jwt.jks

5、获取公钥:public key

keytool -list -rfc --keystore f:/black/jwt.jks | openssl x509 -inform pem -pubkey

 6、编写测试类

package com.senge.ali.auth.util;

import cn.hutool.json.JSONUtil;
import com.google.common.collect.Maps;
import org.springframework.core.io.ClassPathResource;
import org.springframework.security.jwt.Jwt;
import org.springframework.security.jwt.JwtHelper;
import org.springframework.security.jwt.crypto.sign.RsaSigner;
import org.springframework.security.jwt.crypto.sign.RsaVerifier;
import org.springframework.security.rsa.crypto.KeyStoreKeyFactory;

import java.security.KeyPair;
import java.security.interfaces.RSAPrivateKey;
import java.util.Map;

public class JwtTest {

    /**
     * 获取token
     * @throws Exception
     */
    public static String testCreateJwt() throws Exception {
        // 1、创建秘钥工厂
        KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(
                // 秘钥位置
                new ClassPathResource("jwt.jks"),
                // 秘钥库密码
                "123456".toCharArray()
        );
        // 2、基于工厂拿到私钥
        KeyPair keyPair = keyStoreKeyFactory.getKeyPair("jwt", "123456".toCharArray());

        // 转化为rsa私钥
        RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();

        // 3、生成jwt
        Map<String, String> map = Maps.newHashMap();
        map.put("username", "senge");
        map.put("password", "123456");
        Jwt jwt = JwtHelper.encode(JSONUtil.toJsonStr(map), new RsaSigner(rsaPrivateKey));
        String jwtEncoded = jwt.getEncoded();
        System.out.println("jwtEncoded:" + jwtEncoded);
        String claims = jwt.getClaims();
        System.out.println("claims:" + claims);
        return jwtEncoded;
    }

    /**
     * 解析token
     * @throws Exception
     */
    public static void testParseJwt(String jwtToken) throws Exception {
        // 基于公钥去解析jwt
        String publicKey = "-----BEGIN PUBLIC KEY-----\n" +
                "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgRV9PliWWPM8vBm9WG/X\n" +
                "w2IikbtLsYGYBmAu366cP5FsJzo9USWnCx3lwk9oEgmT6KBNRZj54WZAWX7QJivD\n" +
                "ohjxiNghj5rBFH9tOVEoGS/wQK5tu9rEbAGwZdy8BtOYdKk6c0uarP6uEnLxEkWy\n" +
                "evRkX3Ph4Lqb8XBTqxWbIKm0etiCjSfznz46+1fpIVDN//3R6TYs1RxlyiznIJ+l\n" +
                "zFEj3VFTvTcDyaFw2KYHLQ9MmqSv52SldIf2VO8jdoQ3J7cc7Vv3AKiHCXh2dqBV\n" +
                "WkBFSqddEh/Hi9uD2M/qyTLUtwV8sjoFk0Xu0q5i8ALMqdwVBEfLrNnvv+VS/9y+\n" +
                "jwIDAQAB\n" +
                "-----END PUBLIC KEY-----";
        // 解析令牌
        Jwt token = JwtHelper.decodeAndVerify(jwtToken, new RsaVerifier(publicKey));
        // 获取负载
        String claims = token.getClaims();
        System.out.println(claims);
    }

    public static void main(String[] args) throws Exception {
        String token = testCreateJwt();
        testParseJwt(token);
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值