java 实现ssl 单向认证_java代码实现SSL单向认证(cer crt公钥)

这里的代码主要是和mqtt一起连用,使用的证书是mqttserver.crt

public static final String caPath = "mqttserver.crt";

public SSLSocketFactory getSSLSocktet() throws Exception {

// CA certificate is used to authenticate server

CertificateFactory cAf = CertificateFactory.getInstance("X.509");

FileInputStream caIn = new FileInputStream(caPath);

X509Certificate ca = (X509Certificate) cAf.generateCertificate(caIn);

KeyStore caKs = KeyStore.getInstance("JKS");

caKs.load(null, null);

caKs.setCertificateEntry("ca-certificate", ca);

TrustManagerFactory tmf = TrustManagerFactory.getInstance("PKIX");

tmf.init(caKs);

// finally, create SSL socket factory

SSLContext context = SSLContext.getInstance("TLSv1");

context.init(null, tmf.getTrustManagers(), new SecureRandom());

return context.getSocketFactory();

}

mqtt使用SSL认证代码:

public void mqttTest(){

MqttConnectOptions conOpt = new MqttConnectOptions();

//网址:https://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.javadoc.doc/WMQMQxrClasses/org/eclipse/paho/client/mqttv3/MqttConnectOptions.html

//是否自动重新连接

conOpt.setAutomaticReconnect(false);

//设置服务器是否应该在重新连接时记住客户端的状态。

conOpt.setCleanSession(this.cleanSession);

if (password != null) {

//设置用于连接的账户

conOpt.setPassword(this.password.toCharArray());

}

if (userName != null) {

//设置用于连接的密码

conOpt.setUserName(this.userName);

}

//设置保持活跃间隔(心跳时间,单位秒)

conOpt.setKeepAliveInterval(60);

//设置超时时间

conOpt.setConnectionTimeout(30);

//设置要使用的socketFactory;这允许应用程序围绕创建网路套接字应用自己的策略,如果使用SSL连接,则可以使用SSLSocketFactory提供特定于应用程序的安全策略。

conOpt.setSocketFactory(getSSLSocket());

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中,可以使用 Java Cryptography Architecture (JCA) 提供的 X.509 证书库来实现根据证书链校验公钥证书是否合法。以下是一个简单的示例代码: ```java import java.io.FileInputStream; import java.security.cert.CertPath; import java.security.cert.CertPathValidator; import java.security.cert.CertPathValidatorException; import java.security.cert.CertPathValidatorResult; import java.security.cert.CertPathValidatorSpi; import java.security.cert.CertificateFactory; import java.security.cert.PKIXParameters; import java.security.cert.X509Certificate; import java.util.Arrays; public class CertificateValidator { public static boolean validate(X509Certificate cert, X509Certificate[] chain) throws Exception { // 创建证书工厂并加载证书CertificateFactory cf = CertificateFactory.getInstance("X.509"); CertPath certPath = cf.generateCertPath(Arrays.asList(chain)); // 创建 PKIX 参数,并禁用 CRL 检查 PKIXParameters params = new PKIXParameters(cert.getPublicKey()); params.setRevocationEnabled(false); // 创建证书路径验证器并验证证书CertPathValidator cpv = CertPathValidator.getInstance("PKIX"); CertPathValidatorResult cpvr = cpv.validate(certPath, params); return cpvr != null; } public static void main(String[] args) throws Exception { // 加载根证书和待验证证书 X509Certificate rootCert = (X509Certificate) CertificateFactory.getInstance("X.509").generateCertificate(new FileInputStream("root.cer")); X509Certificate cert = (X509Certificate) CertificateFactory.getInstance("X.509").generateCertificate(new FileInputStream("cert.cer")); // 构建证书链 X509Certificate[] chain = new X509Certificate[] {cert, rootCert}; // 验证证书 boolean isValid = validate(cert, chain); System.out.println("Certificate is " + (isValid ? "valid" : "invalid")); } } ``` 在上述代码中,`validate` 方法接收待验证公钥证书证书链作为参数,使用 PKIX 参数创建证书路径验证器,并调用 `validate` 方法验证证书链。在 `main` 方法中,我们加载根证书和待验证证书,构建证书链,然后调用 `validate` 方法进行证书验证。最终输出证书是否合法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值