mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
fix TomcatEngine to support https
This commit is contained in:
@@ -17,7 +17,9 @@
|
||||
package org.dromara.hutool.crypto;
|
||||
|
||||
import org.dromara.hutool.core.io.IoUtil;
|
||||
import org.dromara.hutool.core.io.file.FileNameUtil;
|
||||
import org.dromara.hutool.core.io.file.FileUtil;
|
||||
import org.dromara.hutool.core.text.StrUtil;
|
||||
import org.dromara.hutool.crypto.provider.GlobalProviderFactory;
|
||||
|
||||
import java.io.File;
|
||||
@@ -35,11 +37,12 @@ import java.security.Provider;
|
||||
public class KeyStoreUtil {
|
||||
|
||||
/**
|
||||
* Java密钥库(Java Key Store,JKS)KEY_STORE
|
||||
* Java密钥库(Java Key Store,JKS)KEY_STORE,Java 平台特有的密钥库格式<br>
|
||||
* JKS 密钥库可以用 Java 的 keytool 工具进行管理。
|
||||
*/
|
||||
public static final String TYPE_JKS = "JKS";
|
||||
/**
|
||||
* jceks
|
||||
* JCEKS(Java Cryptography Extension Key Store)
|
||||
*/
|
||||
public static final String TYPE_JCEKS = "jceks";
|
||||
/**
|
||||
@@ -100,6 +103,31 @@ public class KeyStoreUtil {
|
||||
return readKeyStore(TYPE_PKCS12, in, password);
|
||||
}
|
||||
|
||||
/**
|
||||
* 读取KeyStore文件<br>
|
||||
* KeyStore文件用于数字证书的密钥对保存<br>
|
||||
* 证书类型根据扩展名自动判断,规则如下:
|
||||
* <pre>
|
||||
* .jks .keystore -> JKS
|
||||
* .p12 .pfx等其它 -> PKCS12
|
||||
* </pre>
|
||||
*
|
||||
* @param keyFile 证书文件
|
||||
* @param password 密码,null表示无密码
|
||||
* @return {@link KeyStore}
|
||||
* @since 6.0.0
|
||||
*/
|
||||
public static KeyStore readKeyStore(final File keyFile, final char[] password) {
|
||||
final String suffix = FileNameUtil.getSuffix(keyFile);
|
||||
final String type;
|
||||
if(StrUtil.equalsIgnoreCase(suffix, "jks") || StrUtil.equalsIgnoreCase(suffix, "keystore")){
|
||||
type = TYPE_JKS;
|
||||
}else{
|
||||
type = TYPE_PKCS12;
|
||||
}
|
||||
return readKeyStore(type, keyFile, password);
|
||||
}
|
||||
|
||||
/**
|
||||
* 读取KeyStore文件<br>
|
||||
* KeyStore文件用于数字证书的密钥对保存<br>
|
||||
|
@@ -30,6 +30,7 @@ import java.security.Provider;
|
||||
import java.security.cert.Certificate;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.security.cert.CertificateFactory;
|
||||
import java.security.cert.X509Certificate;
|
||||
|
||||
/**
|
||||
* 数字证书{@link Certificate}相关工具类
|
||||
@@ -141,4 +142,35 @@ public class CertUtil {
|
||||
}
|
||||
return factory;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断一个证书是否是自签名的,即证书由自己签发。
|
||||
* @param cert 证书
|
||||
* @return true表示自签名的,false表示非自签名的
|
||||
*/
|
||||
public static boolean isSelfSigned(final X509Certificate cert) {
|
||||
return isSignedBy(cert, cert);
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证一个证书是否由另一个证书签发。<br>
|
||||
* 来自:sun.security.tools.KeyStoreUtil
|
||||
*
|
||||
* @param end 需要验证的终端证书
|
||||
* @param ca 用于验证的CA证书
|
||||
* @return 如果终端证书由CA证书签发,则返回true,否则返回false
|
||||
*/
|
||||
public static boolean isSignedBy(final X509Certificate end, final X509Certificate ca) {
|
||||
// 检查CA证书的主题和终端证书的颁发者是否相同
|
||||
if (!ca.getSubjectX500Principal().equals(end.getIssuerX500Principal())) {
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
// 使用CA证书的公钥验证终端证书
|
||||
end.verify(ca.getPublicKey());
|
||||
return true;
|
||||
} catch (final Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user