GVKun编程网logo

以编程方式从PEM获取KeyStore(编写程序,使用pickle模块将包含学生成绩)

13

在这篇文章中,我们将为您详细介绍以编程方式从PEM获取KeyStore的内容,并且讨论关于编写程序,使用pickle模块将包含学生成绩的相关问题。此外,我们还会涉及一些关于android–以编程方式从

在这篇文章中,我们将为您详细介绍以编程方式从PEM获取KeyStore的内容,并且讨论关于编写程序,使用pickle模块将包含学生成绩的相关问题。此外,我们还会涉及一些关于android – 以编程方式从google play store下载APK、android – 如何以编程方式从设备获取System On Chip数据、Android 获取keystore SHA1方法、Babylonjs -- 如何以编程方式获取 Inspector 信息?的知识,以帮助您更全面地了解这个主题。

本文目录一览:

以编程方式从PEM获取KeyStore(编写程序,使用pickle模块将包含学生成绩)

以编程方式从PEM获取KeyStore(编写程序,使用pickle模块将包含学生成绩)

如何从包含证书和私钥的PEM文件中以编程方式获取KeyStore?我试图在HTTPS连接中向服务器提供客户端证书。我已经确认,如果我使用openssl和keytool来获取jks文件(该文件是动态加载的),则客户端证书可以使用。我什至可以通过动态读取p12(PKCS12)文件来使其工作。

我正在考虑使用BouncyCastle的PEMReader类,但无法克服一些错误。我正在使用-Djavax.net.debug =
all选项运行Java客户端,并通过调试LogLevel运行Apache Web服务器。我不确定该寻找什么。Apache错误日志指示:

...OpenSSL: Write: SSLv3 read client certificate BOpenSSL: Exit: error in SSLv3 read client certificate BRe-negotiation handshake failed: Not accepted by client!?

Java客户端程序指示:

...main, WRITE: TLSv1 Handshake, length = 48main, waiting for close_notify or alert: state 3main, Exception while waiting for close java.net.SocketException: Software caused connection abort: recv failedmain, handling exception: java.net.SocketException: Software caused connection abort: recv failed%% Invalidated:  [Session-3, TLS_RSA_WITH_AES_128_CBC_SHA]main, SEND TLSv1 ALERT:  fatal, description = unexpected_message...

客户端代码:

public void testClientCertPEM() throws Exception {    String requestURL = "https://mydomain/authtest";    String pemPath = "C:/Users/myusername/Desktop/client.pem";    HttpsURLConnection con;    URL url = new URL(requestURL);    con = (HttpsURLConnection) url.openConnection();    con.setSSLSocketFactory(getSocketFactoryFromPEM(pemPath));    con.setRequestMethod("GET");    con.setDoInput(true);    con.setDoOutput(false);      con.connect();    String line;    BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));    while((line = reader.readLine()) != null) {        System.out.println(line);    }    reader.close();    con.disconnect();}public SSLSocketFactory getSocketFactoryFromPEM(String pemPath) throws Exception {    Security.addProvider(new BouncyCastleProvider());            SSLContext context = SSLContext.getInstance("TLS");    PEMReader reader = new PEMReader(new FileReader(pemPath));    X509Certificate cert = (X509Certificate) reader.readObject();    KeyStore keystore = KeyStore.getInstance("JKS");    keystore.load(null);    keystore.setCertificateEntry("alias", cert);    KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");    kmf.init(keystore, null);    KeyManager[] km = kmf.getKeyManagers();    context.init(km, null, null);    return context.getSocketFactory();}

我注意到服务器在客户端TLSv1中正在日志中输出SSLv3。如果我添加系统属性-Dhttps.protocols =
SSLv3,则客户端也将使用SSLv3,但是会收到相同的错误消息。我还尝试添加-
Dsun.security.ssl.allowUnsafeRenegotiation = true,但结果没有变化。

我已经四处搜寻,这个问题的通常答案是先使用openssl和keytool。就我而言,我需要即时阅读PEM。实际上,我正在移植已经执行此操作的C
程序,坦率地说,我很惊讶在Java中执行此操作有多么困难。C 代码:

  curlpp::Easy request;  ...  request.setOpt(new Options::Url(myurl));  request.setOpt(new Options::SslVerifyPeer(false));  request.setOpt(new Options::SslCertType("PEM"));  request.setOpt(new Options::SslCert(cert));  request.perform();

答案1

小编典典

我想到了。问题在于X509证书本身是不够的。我还需要将私钥放入动态生成的密钥库中。看来BouncyCastle
PEMReader不能一次性处理带有证书和私钥的PEM文件,但它可以分别处理每个文件。我可以自己将PEM读取到内存中,并将其分成两个单独的流,然后将每个输入到一个单独的PEMReader。因为我知道我要处理的PEM文件将首先具有证书,然后具有私钥,所以我可以以健壮性为代价来简化代码。我也知道END
CERTIFICATE分隔符将始终被五个连字符包围。对我有用的实现是:

protected static SSLSocketFactory getSocketFactoryPEM(String pemPath) throws Exception {            Security.addProvider(new BouncyCastleProvider());    SSLContext context = SSLContext.getInstance("TLS");    byte[] certAndKey = fileToBytes(new File(pemPath));    String delimiter = "-----END CERTIFICATE-----";    String[] tokens = new String(certAndKey).split(delimiter);    byte[] certBytes = tokens[0].concat(delimiter).getBytes();    byte[] keyBytes = tokens[1].getBytes();    PEMReader reader;    reader = new PEMReader(new InputStreamReader(new ByteArrayInputStream(certBytes)));    X509Certificate cert = (X509Certificate)reader.readObject();    reader = new PEMReader(new InputStreamReader(new ByteArrayInputStream(keyBytes)));    PrivateKey key = (PrivateKey)reader.readObject();    KeyStore keystore = KeyStore.getInstance("JKS");    keystore.load(null);    keystore.setCertificateEntry("cert-alias", cert);    keystore.setKeyEntry("key-alias", key, "changeit".toCharArray(), new Certificate[] {cert});    KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");    kmf.init(keystore, "changeit".toCharArray());    KeyManager[] km = kmf.getKeyManagers();    context.init(km, null, null);    return context.getSocketFactory();}

更新 :似乎可以在没有BouncyCastle的情况下完成:

    byte[] certAndKey = fileToBytes(new File(pemPath));    byte[] certBytes = parseDERFromPEM(certAndKey, "-----BEGIN CERTIFICATE-----", "-----END CERTIFICATE-----");    byte[] keyBytes = parseDERFromPEM(certAndKey, "-----BEGIN PRIVATE KEY-----", "-----END PRIVATE KEY-----");    X509Certificate cert = generateCertificateFromDER(certBytes);                  RSAPrivateKey key  = generatePrivateKeyFromDER(keyBytes);

protected static byte[] parseDERFromPEM(byte[] pem, String beginDelimiter, String endDelimiter) {    String data = new String(pem);    String[] tokens = data.split(beginDelimiter);    tokens = tokens[1].split(endDelimiter);    return DatatypeConverter.parseBase64Binary(tokens[0]);        }protected static RSAPrivateKey generatePrivateKeyFromDER(byte[] keyBytes) throws InvalidKeySpecException, NoSuchAlgorithmException {    PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);    KeyFactory factory = KeyFactory.getInstance("RSA");    return (RSAPrivateKey)factory.generatePrivate(spec);        }protected static X509Certificate generateCertificateFromDER(byte[] certBytes) throws CertificateException {    CertificateFactory factory = CertificateFactory.getInstance("X.509");    return (X509Certificate)factory.generateCertificate(new ByteArrayInputStream(certBytes));      }

android – 以编程方式从google play store下载APK

android – 以编程方式从google play store下载APK

我正在创建一个 Android应用程序,它依赖于其他一些Android应用程序.因此,如果用户手机上还没有这些相关应用,我想从Play商店以编程方式下载它们.但在此过程中,我不希望控件转到Play商店应用程序(即不应显示Play商店应用程序活动).是否有可能使用一些服务,谷歌API实现这一点?我该如何实施呢?
我尝试了市场api并且它工作但现在安装时我会弹出“未知来源”.是否有可能摆脱这种形式?从Play商店应用程序和市场api下载apk有什么区别?

解决方法

有一个非官方的 market API:
this是你可以用它下载应用程序的方法.

android – 如何以编程方式从设备获取System On Chip数据

android – 如何以编程方式从设备获取System On Chip数据

我希望获得程序化方式的完整处理器名称,如cpu-Z应用程序.例如:Qualcomm Snapdragon 800.最后一个对我来说是最重要的信息,即800.

解决方法:

…like cpu-Z app does. E.g: Qualcomm Snapdragon 800. The last one is the most important information for me, i.e, 800.

@WeybkbcOTHER我可能会让你失望,但你想要获得的信息确实是特定于内核的.在Android设备的广阔市场中,供应商使用了各种各样的设备.如果cpu-Z应用程序显示一个设备所需的信息,并不意味着它对另一个设备的信息相同.同样,这些信息是设备(内核)特定的.

I want to get the complete processor name of an programmatic manner…

Androd操作系统最重要的部分,或者更确切地说是Linux,你可以从/ proc伪文件系统获得这种信息. “文件系统”提供了系统中运行的进程的基于目录的视图以及系统范围的诊断,如处理器信息(同样,您不能依赖于要提供的信息的完整性!).严格地说,/ proc是“设备cpu信息中最接近(较低)的点之一”.

关于“编程方式”,请注意,当从/ proc“filesystem”获取信息时,您将不得不处理解析您要轮询的条目.

下面是一些重要/ proc条目(与命令一起使用)的示例,您可能(或可能不会 – 根据供应商供应)用于派生cpu信息:

> cat / proc / cpuinfo当然,您可以在哪里找到cpu系列名称(如果有的话)(在硬件密钥下);
> cat / proc / stat,您可以在其中调查cpu核心数(表示为cpux,其中x根据核心数计算);

推荐阅读:Android Internals::Power User’s View by Jonathan Levin.

Android 获取keystore SHA1方法

Android 获取keystore SHA1方法

(第一种方式)通过Android Studio编译器获取SHA1

第一步、打开Android Studio的Terminal工具

第二步、输入命令:keytool -v -list -keystore keystore文件路径

第三步、输入Keystore密码

 第二种方式使用 keytool(jdk自带工具)获取SHA1

,按照如下步骤进行操作:

1.运行进入控制台。

2.在弹出的控制台窗口中输入 cd .android 定位到 .android 文件夹。

3.继续在控制台输入命令。

debug.keystore:命令为:keytool -list -v -keystore debug.keystore

自定义的 keystore:命令为:keytool -list -v -keystore apk的keystore

如下所示:

提示输入密钥库密码,编译器提供的debug keystore默认密码是 android,自定义签名文件的密码请自行填写。输入密钥后回车(如果没设置密码,可直接回车),此时可在控制台显示的信息中获取 SHA1 值,如下图所示:

说明:keystore 文件为 Android 签名证书文件。

Babylonjs -- 如何以编程方式获取 Inspector 信息?

Babylonjs -- 如何以编程方式获取 Inspector 信息?

如何解决Babylonjs -- 如何以编程方式获取 Inspector 信息??

当我在 Babylon 中查看场景时,Inspector 可以选择查看 Statistics Pane > Count。此信息包含诸如 Total meshes,Active meshes,Active indices,...,Total materials,Total textures.

之类的项目

我想使用 Babylonjs 库获取此信息,但无法使用文档弄清楚。您能否告知 Babylonjs API 的哪一部分支持以编程方式获取上述数据的功能?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

今天关于以编程方式从PEM获取KeyStore编写程序,使用pickle模块将包含学生成绩的分享就到这里,希望大家有所收获,若想了解更多关于android – 以编程方式从google play store下载APK、android – 如何以编程方式从设备获取System On Chip数据、Android 获取keystore SHA1方法、Babylonjs -- 如何以编程方式获取 Inspector 信息?等相关知识,可以在本站进行查询。

本文标签: