使用 SSL 找不到证书路径的信任锚

2024-04-08

你好,我尝试在 Android 上与 SSL 握手,但收到此错误:

10-21 15:39:33.279: W/System.err(500): javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
10-21 15:39:33.279: W/System.err(500):  at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:381)
10-21 15:39:33.279: W/System.err(500):  at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLOutputStream.<init>(OpenSSLSocketImpl.java:681)
10-21 15:39:33.279: W/System.err(500):  at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.getOutputStream(OpenSSLSocketImpl.java:618)
10-21 15:39:33.279: W/System.err(500):  at com.example.workoutlog.TestSSL.<init>(TestSSL.java:43)
10-21 15:39:33.279: W/System.err(500):  at com.example.workoutlog.HomePage$GetHandShake.doInBackground(HomePage.java:1816)
10-21 15:39:33.279: W/System.err(500):  at com.example.workoutlog.HomePage$GetHandShake.doInBackground(HomePage.java:1)
10-21 15:39:33.289: W/System.err(500):  at android.os.AsyncTask$2.call(AsyncTask.java:287)
10-21 15:39:33.289: W/System.err(500):  at java.util.concurrent.FutureTask.run(FutureTask.java:234)
10-21 15:39:33.289: W/System.err(500):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
10-21 15:39:33.289: W/System.err(500):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
10-21 15:39:33.289: W/System.err(500):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
10-21 15:39:33.289: W/System.err(500):  at java.lang.Thread.run(Thread.java:856)
10-21 15:39:33.289: W/System.err(500): Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
10-21 15:39:33.289: W/System.err(500):  at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:276)
10-21 15:39:33.289: W/System.err(500):  at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:197)
10-21 15:39:33.289: W/System.err(500):  at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:584)
10-21 15:39:33.299: W/System.err(500):  at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method)
10-21 15:39:33.299: W/System.err(500):  at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:378)
10-21 15:39:33.299: W/System.err(500):  ... 11 more
10-21 15:39:33.299: W/System.err(500): Caused by: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
10-21 15:39:33.299: W/System.err(500):  ... 16 more
10-21 15:39:33.299: W/dalvikvm(500): threadid=17: thread exiting with uncaught exception (group=0x40cf7930)
10-21 15:39:33.310: W/GAV2(500): Thread[AsyncTask #4,5,main]: dispatch call queued.  Need to call GAServiceManager.getInstance().initialize().

这是我的代码:

public class TestSSL {

    SSLSocket sslsocket;
    Context context;

    public TestSSL(Context context)
    {
        SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();

        try {
            sslsocket = (SSLSocket) sslsocketfactory.createSocket("server", port);
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        InputStream inputstream = null;
        try {
            inputstream = sslsocket.getInputStream();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
        BufferedReader bufferedreader = new BufferedReader(inputstreamreader);


        OutputStream outputstream = null;
        try {
            outputstream = sslsocket.getOutputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        OutputStreamWriter outputstreamwriter = new OutputStreamWriter(outputstream);
        BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter);

        sslsocket.addHandshakeCompletedListener(new HandshakeCompletedListener() {

            @Override
            public void handshakeCompleted(HandshakeCompletedEvent event) {
                // TODO Auto-generated method stub
                Log.i("test", event.toString());
            }
        });

        try {
            sslsocket.startHandshake();
        } catch (IOException e) {
            e.printStackTrace();
        }  

    }       
}

为什么我会收到此错误? 谢谢。


我想您正在尝试使用自签名证书连接开发服务器。阅读以下文章。

http://developer.android.com/training/articles/security-ssl.html#HttpsExample http://developer.android.com/training/articles/security-ssl.html#HttpsExample

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SSL 找不到证书路径的信任锚 的相关文章

  • 如何正确显示AChartEngine条形图

    我在用图表引擎 1 0 1 最新 并想演示一个条形图 这就是我要的 我想要的图表 到目前为止我所取得的成就 1 1 view 缩小视图 问题 图表的左右部分在 1 1 视图中丢失 酒吧之间的距离是如此之远 我需要减少它 该栏未正确位于文本标
  • Android:检查是否必须询问运行时权限

    我想检查特定应用程序是否需要在运行时处理 Android Marshmallow 运行时权限 下面的假设正确吗 Checks whether runtime permissions must be handled or not param
  • 进度条中形状的填充

    我正在使用 xml 文件来定义进度条 我在背景形状上定义了填充 但这个设置有时会正确显示 有时则不能 因此 如果我启动内部带有进度条的应用程序或活动 则会正确显示带有背景和 填充 进度的进度条 然后我关闭我的应用程序并再次启动它 并且 进度
  • 从相机、SurfaceView 或 SurfaceHolder 连续获取图像数据

    所以我设置了这个相机预览Camera SurfaceView and SurfaceHolder 我也有一个ImageView我将在其中放置相机图像的修改版本 并且我希望它更新 假设每秒更新一次 当我从 res 加载图像时 所有代码都已准备
  • Phonegap(3.0.0) 相机第一次尝试不成功

    出于测试目的 我复制了在音隙相机 API http docs phonegap com en 3 0 0 cordova camera camera md html Camera我发出警报onPhotoDataSuccess测试函数何时被触
  • 使用 toast 显示来自 catch 语句的错误消息

    我的 Android 应用程序中有以下 catch 语句 我想通过 toast 显示任何错误消息 我可以这样做吗 catch Exception e Helper displayExceptionMessage this e getMess
  • 在Android中的TextView下方绘制下划线

    我想在我的下面画下划线TextView 我搜索了一些内容 但找不到任何有成果的内容 有人可以帮我吗 在 TextView 中添加文本下方有三种方法 跨度字符串 http developer android com reference and
  • 如何监听自定义 URI

    我正在开发一个有自己的 URI 前缀的应用程序 在本例中为 dchub 到处搜索并阅读了很多 但我有点困惑 当有人点击以以下开头的链接时 是否可以启动我的应用程序dchub 在浏览器中 到目前为止 找到了很多从应用程序打开浏览器的其他示例
  • 如何安全地更改Android Studio中的项目名称?

    我想更改Android Studio中的项目名称 我在 Stackoverflow 上找到了一些答案 但它对我不起作用 请给我推荐一些合适的解决方案 目前我正在使用 Android Studio 2 3 永远感谢 您需要执行几个步骤 首先转
  • Android:由于 Web 服务 Http 请求,活动显示时间过长

    我的一项活动是在启动应用程序时向 Web 服务发出 http 请求以获取一些天气数据 由于 Web 服务请求 活动需要 3 4 秒才能显示的问题 在实际设备上测试 我知道我没有以正确的方式这样做 我所做的就是在 onCreate 方法上 我
  • android中viewpager中的多个视频播放器

    我想在 viewpager 中的不同片段上播放视频 我为每个片段使用多个媒体播放器和表面视图 当我向左或向右滑动时 我也想暂停和开始视频 滑动到下一个视频完全没有问题 但是当我滑动到上一个视频 已经在播放 时 表面视图重叠 同时 我可以毫无
  • Unity 2018.3 android dex合并问题

    在您决定将这篇文章视为 重复 而不阅读它之前 请了解我已经查看了大量与此主题相关的帖子 但我找不到适合我的实例的解决方案 包括 StackOverflow 建议的所有解决方案 大多数帖子都是针对 Android Studio 而不是 Uni
  • PRAW 出现 SSLError?

    我正在尝试开始使用 PRAW 但在使用 login 时遇到问题 我有以下代码 import praw r praw Reddit This is a test bot r login myRedditUsername password 我收
  • Firebase 实时数据库 .info/connected 本应为 True 时为 False

    我有一个 Android 服务 它的调用地址为onCreate FirebaseDatabase database FirebaseDatabase getInstance database getReference info connec
  • 在没有 SurfaceView 的 Android 上获取 GPU 信息

    在Android上 有没有一种方法可以在不创建SurfaceView的情况下获取GPU信息 我不想使用 OpenGL 绘制任何内容 但我只需要获取硬件信息 例如供应商 OpenGL ES 版本 可用扩展等 抱歉 我不知道如何在 Androi
  • 在不同的活动上显示 OnItemClickListener 的结果

    我使用 OnItemClickListener 从列表视图中选择一个项目 如下所示 listView setTextFilterEnabled true final TextView disp TextView findViewById R
  • 如何将两个 APK 合并为一个,以便两个应用程序可以同时安装

    如何将 2 个 Android 应用程序合并到捆绑包中 以便在安装捆绑包时同时安装两个应用程序 我想将 2 个 APK 合并到一个捆绑包中 以便我可以将其上传到 Android Market 当有人将其安装到设备上时 这两个应用程序都应该安
  • 调用 MediaScannerConnection.scanFile 后,MediaStore 内的 Android 缩略图不会刷新

    我正在尝试构建一个类似画廊的应用程序 它将在外部存储上执行以下功能 列出所有包含图像的文件夹 列出所有可供公众使用的图像 不会探测里面的文件Android data 到目前为止 我可以列出所有图像以及包含图像的文件夹 然而 我后来发现这些图
  • java.io.IOException:Android Firebase 中的 FIS_AUTH_ERROR 但调试模式正常

    我在检索 firebase 令牌时遇到以下问题 FirebaseMessaging getInstance getToken 在调试模式下 我获取令牌并将其发送到服务器 在运行模式下 应用程序工作正常 它已发布 但我无法获取令牌 因为我已经
  • Android:如何实现“分布式控制”

    对于与 Android 开发者论坛的交叉发帖表示歉意 那里没有收到任何答复 我有一个有趣的设计挑战 我有一个前端 Activity 和一个后端 用本机 C C 编写 代码 后端是一个复杂的对象 它部分控制 应用程序流程一旦启动就在它自己的线

随机推荐