java证书存放位置_Java中的证书路径发现

我尝试通过Java内置功能为此(HttpURLConnection)建立一个https连接。但是我得到这个异常:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)

...

...

我的证书链是:

Root certificate -> Intermediate certificate -> Web server certificate

所使用的证书通过“路径发现”的含义是正确的。信任锚是根证书,该根证书导入到我系统上的Java密钥库中。中间证书不是…但是

中间证书由我信任的根签名-因此,我也信任中间证书。

Web服务器证书已使用我信任的中间证书签名(第1点)

那么验证必须成功通过?我做错什么了吗?

我在某处读到了这个:

浏览器可以执行自动发现,而服务器到服务器则不能。

但是缺少此功能是非常基本的。是否有进行自动发现的明确方法?

* 更新

是的,这就是问题,GPI。我很困惑,因为浏览器可以验证服务器证书,但是Java应用程序不能。该行为的原因是:

服务器仅发送最终证书,而不发送整个证书链;

该证书是最近购买的,并使用相对较新的中间证书进行了签名;

浏览器具有相对最新的证书列表,包括中间证书;

Java具有相对最新的证书列表,并且中间没有证书。

浏览器通过中间证书验证最终证书Java无法检查证书链,因为:1.链未发送;2.最终证书的签署者(中间证书)不是信任锚。

解决方案可以是:

服务器返回整个证书链

要在Java信任库中添加的中间证书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个用 Java 编写的 jgit 拉取仓库的示例代码,支持路径: ```java import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; import java.io.File; public class JGitDemo { public static void main(String[] args) { String localPath = "D:/test"; // 本地路径 String remoteUrl = "https://github.com/username/repo.git"; // 远程仓库地址 String username = "your_username"; // 用户名 String password = "your_password"; // 密码 try { Git.cloneRepository() .setURI(remoteUrl) .setCredentialsProvider(new UsernamePasswordCredentialsProvider(username, password)) .setDirectory(new File(localPath)) .call(); System.out.println("Repository cloned successfully!"); } catch (GitAPIException e) { System.out.println("Repository cloning failed: " + e.getMessage()); } } } ``` 在上述代码,我们使用 `Git.cloneRepository()` 方法来克隆远程仓库,设置了远程仓库地址、用户名、密码、本地路径等参数,并使用 `setCredentialsProvider()` 方法设置了用户名和密码,保证了拉取私有仓库的权限。同时,我们使用了 `setDirectory()` 方法设置了本地仓库的路径,确保了拉取后的仓库存放在正确的位置。 要支持路径,我们只需要在设置本地路径时使用正确的编码方式,例如: ```java String localPath = new String("D:/测试".getBytes("UTF-8"), "UTF-8"); ``` 这里我们将本地路径转换成了 UTF-8 编码格式,确保了路径能够被正确处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值