茂名阿里云代理商:android 获取证书指纹

要在Android上获取证书的指纹,您可以使用以下代码片段:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class CertificateUtils {
    public static String getCertificateFingerprint(Context context, String packageName) {
        try {
            Signature[] signatures = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES).signatures;
            if (signatures.length > 0) {
                Signature signature = signatures[0];
                byte[] certBytes = signature.toByteArray();

                MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
                byte[] digest = messageDigest.digest(certBytes);

                StringBuilder builder = new StringBuilder();
                for (byte b : digest) {
                    builder.append(Integer.toHexString((b & 0xFF) | 0x100).substring(1, 3));
                    builder.append(":");
                }

                return builder.toString().toUpperCase();
            }
        } catch (PackageManager.NameNotFoundException | NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }
}

然后,您可以在您的Activity类中使用以下代码来获取证书指纹:

String packageName = getApplicationContext().getPackageName();
String fingerprint = CertificateUtils.getCertificateFingerprint(getApplicationContext(), packageName);
if (fingerprint != null) {
    Log.d("Fingerprint", fingerprint);
} else {
    Log.e("Fingerprint", "Failed to get certificate fingerprint");
}

在上述代码中,packageName 是您想要获取指纹的应用程序的包名。请确保在使用上述代码之前,您已经获取了适当的权限(例如,<uses-permission android:name="android.permission.GET_PACKAGE_SIZE" />)。

在Android中获取证书指纹,可以通过以下代码实现:

import java.security.MessageDigest;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;

public class MyTrustManager implements X509TrustManager {
    @Override
    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        // 不做任何操作,接受任意客户端证书
    }

    @Override
    public void checkServerTrusted(X509Certificate[] chain, String authType) {
        // 获取证书指纹
        for (X509Certificate cert : chain) {
            try {
                MessageDigest md = MessageDigest.getInstance("SHA-1");
                byte[] publicKey = md.digest(cert.getEncoded());
                // 将字节数组转换为十六进制字符串
                StringBuilder hexString = new StringBuilder();
                for (byte b : publicKey) {
                    String appendString = Integer.toHexString(0xFF & b).toUpperCase();
                    if (appendString.length() == 1)
                        hexString.append("0");
                    hexString.append(appendString);
                    hexString.append(":");
                }
                String fingerprint = hexString.toString().substring(0, hexString.length() - 1);
                System.out.println("证书指纹:" + fingerprint);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
        return new X509Certificate[0];
    }
}

然后在你的网络请求方法中使用上述TrustManager,可以在HttpsURLConnection中设置如下:

URL url = new URL("https://example.com");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setSSLSocketFactory(getSSLSocketFactory());
connection.setHostnameVerifier(new HostnameVerifier() {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        // 不进行主机名验证,接受任意域名主机
        return true;
    }
});
connection.connect();

其中,getSSLSocketFactory()方法用于获取自定义的SSLSocketFactory,代码如下:

茂名阿里云代理商:android 获取证书指纹
import java.security.KeyStore;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;

public class SSLUtil {
    public static javax.net.ssl.SSLSocketFactory getSSLSocketFactory() {
        X509TrustManager trustManager = new MyTrustManager();
        TrustManager[] trustManagers = new TrustManager[] { trustManager };
        SSLContext sslContext;
        try {
            sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, trustManagers, null);
            return sslContext.getSocketFactory();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

以上代码通过自定义的TrustManager,实现了获取服务器证书指纹的功能。

发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/141794.html

(0)
luotuoemo的头像luotuoemo
上一篇 2024年2月9日 11:03
下一篇 2024年2月9日 11:13

相关推荐

  • 阿里云科创城项目怎么样啊

    阿里云上的web项目如何进行二次开发 将项目下载到本地,然后在修改,修改完之后(要保证不出错误)覆盖即可 阿里云上怎么部署javaweb项目 在阿里云上买了ecs服务器和域名,怎么配置服务器来部署javaweb项目可以这么做——1.登入阿里云,进入产品与服务,选择云市场 2.在云市场选择适合的运行环境 3.停止服务器,更换系统盘,选择运行环境 4.项目的数据…

    2023年8月27日
    10000
  • 腾讯阿里云计算领域

    平安云,阿里云,腾讯云在云计算行业中有什么区别 每个公司都有自己的特点,平安云擅长金融,医疗,保险行业,云计算产品比较便宜,特别是金融云服务。阿里云是什么行业都做,产品比较多,优势应该是机房比较多。速度比较快,但是因为客户多,所以后期服务跟不上。腾讯云擅长游戏,直播行业,技术开发团队外包比较多,项目多为外包完成。 国内云计算科技最先进的企业是 IBM,阿里云…

    2023年8月27日
    11700
  • 洛阳阿里云代理商:阿里云5话题精华

    了解阿里云服务:作为洛阳阿里云代理商,了解阿里云的各种服务和优势是至关重要的。这包括云服务器、云数据库、云存储、内容分发网络等各种产品,以及它们的特点和适用场景。 了解阿里云的价格政策:了解阿里云的价格体系对于代理商来说也是非常重要的。知道各种产品的价格及计费方式,可以帮助代理商更好地为客户选择合适的产品和服务。 学习阿里云的销售技巧:作为代理商,销售技巧是…

    2024年2月21日
    13900
  • 阿里云人脸识别价格

    阿里云人脸识别服务根据不同的需求和规模,提供了多个不同的价格方案。以下是阿里云上的一些常见的人脸识别服务及其价格: 人脸检测:0.603元/千次请求 人脸比对:0.241元/千次请求 人脸搜索:0.963元/千次请求 人脸搜索时的相似度排序:3.579元/千次请求 请注意,以上价格仅供参考,具体价格可能会因需求量和使用情况而有所不同。推荐您登录阿里云官网,访…

    2023年8月10日
    13100
  • 云视频直播

    云视频直播(Cloud Video Streaming)是一种通过云端技术实现的视频直播服务。它将视频流上传到云服务器,并通过互联网传输给用户,用户可以在任何时间和地点通过互联网观看直播内容。云视频直播具有以下特点: 高可靠性:云视频直播基于云服务器,具有高度可靠性和稳定性,可以提供持续稳定的直播服务。 高扩展性:云视频直播可以根据需要轻松扩展服务器资源,以…

    2023年8月10日
    13000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

4000-747-360

在线咨询: QQ交谈

邮件:ixuntao@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
购买阿里云服务器请访问:https://www.4526.cn/