我OpenSSL使用该HttpsUrlConnection对象让Android连接到一个简单的服务器时遇到了麻烦(我已经通过StackOverflow和一堆在线教程进行了梳理,并按照示例进行了大量的线条,我仍然无法弄清楚为什么我的当我使用我的本地信任库时,它被破坏了.
我目前有一个Android活动试图连接到一个简单的OpenSSL server(我可以使用OpenSSL客户端连接到我的服务器),一旦HttpsUrlConnection.connect()被调用我收到" javax.net.ssl.SSLException: Connection closed by peer" error during the SSL handshake. 也许我正在设置我的样本服务器错误?
注意事项:
Android 4.1 API 16.我已经尝试过的事情:
127.0.0.1 and 10.0.2.2SecureRandom() with the SSLContext.init()'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) 我想知道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) 我正在编写一个 iOS 客户端应用程序,该应用程序向服务器发送请求,该服务器转身并请求通过外部 MDM (AirWatch) 将更新的配置文件推送到我的设备。我相信配置文件显示在Settings -> General -> Profiles. 当 MDM 处理完配置文件推送(已发送或已排队,我不确定)时,它会响应调用服务器说“是的配置文件已推送”,后者将该响应响应给我的客户端应用程序。
问题是配置文件实际推送/安装在设备上大约需要 30 秒,而 Web 服务响应比这要短得多。所以我的客户端应用程序认为配置描述文件已经安装,并且它允许应用程序在配置文件仍然不可用时继续。我希望能够检测到配置文件何时成功推送到我的设备,并且不允许应用程序继续运行直到之后。我的另一个选择是制作一个弹出窗口,说明配置文件已成功推送,但我仍然需要检测正在安装的配置文件。
2013 年关于 stackoverflow 的大部分问答似乎都说不可能查询配置文件,但我想知道人们最近是否尝试过任何变通方法。我想到了以下可能性 - 但我不知道哪个是首选,或者是否可以使用 iOS7(截至 2/12/2014)。
registerForRemoteNotificationTypes/didReceiveRemoteNotification或didFinishLaunchingWithOptions作为说明,我查看了以下链接以及更多链接:
提前致谢!
objective-c mdm ios provisioning-profile configuration-profile
我发现当我创建一个受密码保护的 PKCS12 文件时,该文件还包含一个受密码保护的私钥及其相关的公钥/证书,无论提供给getKey()(内部加密内容)的密码如何,我都能够解密私钥只要提供正确的密码给KeyStore的初始load(). 这是一个已知问题还是有其他人看到过?看起来私钥密码确实没有被使用或完全被忽略。我使用 Android 和 BouncyCastle 作为提供程序。我也很好奇这个问题是否适用于 JKS 而不仅仅是 BouncyCastle?为清楚起见,已删除以下代码中的错误检查。
当我创建我的 PKCS12 文件时,我使用以下代码(privateKeyis anRSAPrivateKey和signedCertis 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) 当使用相同的密钥和证书文件创建 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 …
openssl ×3
android ×2
pkcs#12 ×2
bouncycastle ×1
certificate ×1
cryptography ×1
encryption ×1
ios ×1
java ×1
keystore ×1
mdm ×1
node.js ×1
objective-c ×1
private-key ×1
ssl ×1