小编asp*_*zae的帖子

Android HttpsUrlConnection javax.net.ssl.SSLException使用本地信任库时,由对等握手错误关闭连接

OpenSSL使用该HttpsUrlConnection对象让Android连接到一个简单的服务器时遇到了麻烦(我已经通过StackOverflow和一堆在线教程进行了梳理,并按照示例进行了大量的线条,我仍然无法弄清楚为什么我的当我使用我的本地信任库时,它被破坏了.

我目前有一个Android活动试图连接到一个简单的OpenSSL server(我可以使用OpenSSL客户端连接到我的服务器),一旦HttpsUrlConnection.connect()被调用我收到" javax.net.ssl.SSLException: Connection closed by peer" error during the SSL handshake. 也许我正在设置我的样本服务器错误?

注意事项:

  • 目前没有客户授权
  • 我可以在加载默认信任库时连接到https://www.google.com
  • 无法使用自签名证书连接到localhost上的服务器
  • 不想信任所有证书
  • 不想使用Apache HttpClient
  • 想只使用本地信任库
  • 用充气城堡创建了本地信托商店
  • 我能够正确加载信任库
  • 在代理防火墙后面,代理在我的android虚拟设备上设置
  • AVD设置为Android 4.1 API 16.

我已经尝试过的事情:

  • 连接到两者 127.0.0.1 and 10.0.2.2
  • 使用新的 SecureRandom() with the SSLContext.init()
  • 使用创建URL 'URL u = new URL("https", "10.0.2.2", 443, "/");'
  • 使用TrustManagerFactory.getDefaultAlgorithms()而不是"X509"
    • 给出"Unexpected response code error 503"而不是"由同伴关闭的连接"

提前感谢您抽出宝贵时间来审核我的问题!

使用命令启动简单服务器:

$ sudo openssl s_server -accept 443 -cert server-cert.pem -key …
Run Code Online (Sandbox Code Playgroud)

ssl android openssl android-emulator httpsurlconnection

11
推荐指数
1
解决办法
3万
查看次数

TLS ECDHE-ECDSA-AES128-GCM-SHA256的密钥生成要求

我想知道ECDHE-ECDSA-AES128-GCM-SHA256和ECDHE-ECDSA-AES128-GCM-SHA256是否有最低密钥生成要求?我试图让一个TLS客户端和服务器使用上述算法之一相互连接并继续接收"没有共享密码错误".我创建了一个用于签署客户端和服务器证书的CA,并尝试仅使用openssl和node.js进行连接.我在localhost(127.0.0.1)上运行cliengt和server以消除任何其他可能的问题.

这是我到目前为止所做的:

CA密钥对创建:

  $ openssl genrsa -out ca-key.pem 4096
  $ openssl req -new -x509 -days 365 -key ca-key.pem -out ca-cert.pem
Run Code Online (Sandbox Code Playgroud)

服务器/客户端密钥对创建:

  $ openssl genrsa -out server-key.pem 4096
  $ openssl req -new -key server-key.pem -out server-csr.pem
  $ openssl x509 -req -days 365 -in server-csr.pem -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem 

  $ openssl genrsa -out client-key.pem 4096
  $ openssl req -new -key client-key.pem -out client-csr.pem
  $ openssl x509 -req -days 365 -in client-csr.pem -CA ca-cert.pem -CAkey ca-key.pem -set_serial 02 -out …
Run Code Online (Sandbox Code Playgroud)

openssl cryptography node.js

10
推荐指数
1
解决办法
2万
查看次数

以编程方式验证 MDM 配置文件(配置)是否已成功推送到 iOS 设备?

我正在编写一个 iOS 客户端应用程序,该应用程序向服务器发送请求,该服务器转身并请求通过外部 MDM (AirWatch) 将更新的配置文件推送到我的设备。我相信配置文件显示在Settings -> General -> Profiles. 当 MDM 处理完配置文件推送(已发送或已排队,我不确定)时,它会响应调用服务器说“是的配置文件已推送”,后者将该响应响应给我的客户端应用程序。

问题是配置文件实际推送/安装在设备上大约需要 30 秒,而 Web 服务响应比这要短得多。所以我的客户端应用程序认为配置描述文件已经安装,并且它允许应用程序在配置文件仍然不可用时继续。我希望能够检测到配置文件何时成功推送到我的设备,并且不允许应用程序继续运行直到之后。我的另一个选择是制作一个弹出窗口,说明配置文件已成功推送,但我仍然需要检测正在安装的配置文件。

2013 年关于 stackoverflow 的大部分问答似乎都说不可能查询配置文件,但我想知道人们最近是否尝试过任何变通方法。我想到了以下可能性 - 但我不知道哪个是首选,或者是否可以使用 iOS7(截至 2/12/2014)。

  1. 查询我需要的已安装配置文件(从我见过的大多数问答中听起来不可能;不知道 iOS7 的更新是否改变了这一点)
    • 如果我知道我正在寻找的确切个人资料名称怎么办?
  2. 为 MDM 推送添加通知侦听器
    • 使用registerForRemoteNotificationTypes/didReceiveRemoteNotificationdidFinishLaunchingWithOptions
    • MDM 推送可能发生在我的应用程序之外,因此沙盒可能会妨碍
    • 你能监听 MDM 使用的端口吗?
  3. 侦听对配置文件配置设置的更改
  4. 在服务器上添加一个请求来查询设备的已安装配置文件,并在向客户端发送响应之前调用该请求
  5. 通过在配置文件中包含自签名证书并对其进行验证来进行证书验证
    • 看起来有点笨拙,我不确定我的 MDM 是否允许我这样做
  6. 使用可达性方法

作为说明,我查看了以下链接以及更多链接:

提前致谢!

objective-c mdm ios provisioning-profile configuration-profile

5
推荐指数
1
解决办法
3270
查看次数

KeyStore 不使用 BouncyCastle 在 Android 中应用/强制执行 PKCS12 文件的私钥密码

我发现当我创建一个受密码保护的 PKCS12 文件时,该文件还包含一个受密码保护的私钥及其相关的公钥/证书,无论提供给getKey()(内部加密内容)的密码如何,我都能够解密私钥只要提供正确的密码给KeyStore的初始load(). 这是一个已知问题还是有其他人看到过?看起来私钥密码确实没有被使用或完全被忽略。我使用 Android 和 BouncyCastle 作为提供程序。我也很好奇这个问题是否适用于 JKS 而不仅仅是 BouncyCastle?为清楚起见,已删除以下代码中的错误检查。

当我创建我的 PKCS12 文件时,我使用以下代码(privateKeyis anRSAPrivateKeysignedCertis an X509Certificate):

KeyStore store;
store = KeyStore.getInstance( "PKCS12", "BC" );
store.load( null, null );

X509Certificate[] chain = new X509Certificate[1];
chain[0] = signedCert;

store.setKeyEntry( pkcs12Alias, privateKey, p12PkeyPass.toCharArray(), chain );

FileOutputStream fos;
File outputDir = appContext.getFilesDir();
File pkcs12File = new File( outputDir, p12Filename );
fos = new FileOutputStream( pkcs12File );

store.store( fos, p12Pass.toCharArray() ); …
Run Code Online (Sandbox Code Playgroud)

java android bouncycastle keystore pkcs#12

4
推荐指数
1
解决办法
3656
查看次数

连续生成 OpenSSL PKCS12 会产生不同的私钥内容

当使用相同的密钥和证书文件创建 PKCS12 (PKCS#12 / p12) 文件时,我注意到连续调用 的功能OpenSSL每次都会pkcs12产生不同的内容(我还使用相同的导入密码和 PEM 密码)。ENCRYPTED PRIVATE KEY这应该发生吗?我猜测这与不同的 IV(初始化向量)或与私钥的对称加密相关的盐有关,但我想确定一下。

我使用以下命令创建 cred1.p12 和 cred2.p12 文件:

openssl pkcs12 -export -in certs/cert.pem -out cred1.p12 -name "My credentials" -inkey private/key.pem
openssl pkcs12 -export -in certs/cert.pem -out cred2.p12 -name "My credentials" -inkey private/key.pem
Run Code Online (Sandbox Code Playgroud)

当我比较生成的 .p12 文件(diff cred1.p12 cred2.p12导致二进制差异)时,我使用以下命令创建两个PKCS12信息文本文件,并在其上执行另一个 .p12 文件diff

 openssl pkcs12 -info -in cred1.p12 > a.txt
 openssl pkcs12 -info -in cred2.p12 > b.txt
 diff a.txt b.txt
Run Code Online (Sandbox Code Playgroud)

唯一的区别在于保存私钥内容的-----BEGIN ENCRYPTED …

encryption openssl certificate pkcs#12 private-key

3
推荐指数
1
解决办法
1305
查看次数