Articles of openssl

编译最新的OpenSSL for Android

我正在尝试为Android的OpenSSL1.0.1c的(.so)文件生成共享库。 我发现他们在android脚本中添加了三个用于编译Android的选项。 ./Configure android-armv7 (or) ./Configure android-x86 (or) ./Configure android 一旦我配置了操作系统,然后尝试编译,它的抛出错误。 目前我正在使用x86 windows7并安装了Cygwin,Android sdk R20,Android NDK r8 sh-4.1$ make making all in crypto… make[1]: Entering directory `/cygdrive/d/SourceCodes/OpenSSL/openssl-1.0.1c/crypto’ gcc -I. -I.. -I../include -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -march=armv7-a -mandroid -I/include -B/lib -O3 -fomit-frame-pointer -Wall -DOPENSSL_BN_ASM_MONT -DOP ENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DAES_ASM -DGHASH_ASM -c -o cryptlib.o cryptlib.c cc1: […]

使用php OpenSSL进行Android应用内购买服务器签名validation

尝试遵循以下针对应用内购买的一些安全准则: http : //developer.android.com/guide/market/billing/billing_best_practices.html 我试图在服务器上而不是在应用程序中自己进行签名validation。 我理想情况下喜欢使用php openssl库,它看起来像以下代码应该工作: 我用app64购买捆绑包中的base64解码签名字符串替换签名,并使用同一捆绑包中的数据。 公钥需要采用PEM格式,我添加了BEGIN和END令牌以及一些换行符。 我的问题是我无法获得此PHP代码来成功validation数据/签名,我不知道需要更改什么才能使其正常工作。 如果我使用openssl,创建一个私钥和公钥,使用sha1为相同的数据创建一个签名,并通过上面的PHP代码运行它,它工作正常并validation成功。 以下是我使用OpenSSL的方法: openssl genrsa -out private.pem openssl rsa -in private.pem -pubout -out public.pem 然后我使用private.pem和一些php代码生成签名: … openssl_sign($data, $signature, $pkeyid); … 有没有人有任何工作样本PHP代码与服务器端validation应用程序内签名? 我可以运行示例应用程序中的等效java代码,这似乎工作正常,但我想尽可能直接使用PHP。

通过Windows中的OpenSSL为我的Android应用程序创建带有自签名证书的PKCS#12文件

我正在编写一个Android应用程序,需要对某些Web请求进行SSL认证。 我需要使用自签名证书构建PKCS12文件( .pfx )。 我决定使用OpenSSL库,但我无法在我的计算机上构建它(Windows x64平台)。 我想在没有安装ActivePerl的情况下这样做。 谁知道简单的方法来构建它? 我试图在我的朋友计算机上使用OpenSSL构建一个PKCS12文件(使用OpenSSL,Linux),但我什么都没得到。 任何人都可以帮助我,并描述生成具有私钥和自签名公共证书的PKCS12文件的操作顺序?

Android ssl:javax.net.ssl.SSLPeerUnverifiedException:没有对等证书(再次)

我有一个网站,我正在为一个RESTful服务启用ssl。 我们已在RapidSSL注册,安装了证书,并通过了RapidSSL检查程序 。 我可以使用各种浏览器访问该网站,包括Android浏览器(内置,Firefox和Opera)没有问题,没有警告。 但是,当我尝试使用我的Android应用程序访问它时,我得到以下exception: 08-11 20:04:05.586 363 381 E HttpProvider: Error executing request: No peer certificate 08-11 20:04:05.586 363 381 E HttpProvider: javax.net.ssl.SSLPeerUnverifiedException: No peer certificate 08-11 20:04:05.586 363 381 E HttpProvider: at org.apache.harmony.xnet.provider.jsse.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:259) 08-11 20:04:05.586 363 381 E HttpProvider: at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:93) 08-11 20:04:05.586 363 381 E HttpProvider: at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381) 08-11 20:04:05.586 363 381 […]

Google Play和OpenSSL警告消息

我刚刚收到来自Google Play的电子邮件,说明: 你好, 您的一个或多个应用程序运行的是过时的OpenSSL版本,该版本存在多个安全漏洞。 您应该尽快更新OpenSSL。 有关OpenSSL中最新安全漏洞的更多信息,请访问http://www.openssl.org/news/secadv_20140605.txt 。 请注意,虽然尚不清楚这些特定问题是否会影响您的应用程序,但具有漏洞的应用程序可能会将用户置于危险之中,可能会被视为“危险产品”,并且可能会从Google Play中删除。 问候, Google Play团队 ©2014 Google Inc. 1600 Amphitheatre Parkway Mountain View,CA 94043 电子邮件偏好设置:我们向您发送这封必读的电子邮件服务通告,目的是让您了解Google Play帐户的重大变化。 我没有明确地在任何应用程序中包含OpenSSL。 使用Android NDK的应用程序使用的是NDK 9d(最新版本)。 我使用的唯一外部本机库是ffmpeg和OpenCV以及一些没有包含本机代码的广告库。 还有哪些地方可以包含OpenSSL导致此警告? 问候,

符合我的Android项目的FIPS

我正在开发一个安全相关的项目,并且必须确保它符合FIPS标准。 根据我的理解,FIPS合规性是硬件和软件层面的合规性。 目前有两个三星Android设备是符合FIPS的,即他们在硬件和软件水平的合规性。 我有几个问题如下: 1)如果我想使我的Android应用程序符合FIPS,如果我有唯一的encryption模块用于我的项目FIPS兼容,是否足够? Android SDK提供的encryption模块是BouncyCastle库,它不符合FIPS。 我在我的项目中使用FIPS兼容的OpenSSL库按照stackoverflow 链接 我已经使用OpenSSL库构build了我的项目库,即使用FIPS模块configuration的libssl.a和libcrypto.a。 2)根据用于Android 文档的FIPS OpenSSL模块,该模块已经在不同的armv7架构的Android设备上进行了testing。 Android硬件不符合FIPS标准吗? 3)AESalgorithm符合FIPS标准。 这是否意味着如果我在Java代码中使用AESalgorithm,而不是使用符合FIPS的OpenSSL库,则不符合FIPS。 如果AES符合FIPS标准,那么与Java或C#实现AES有什么关系。 他们是否都必须通过CMVP? 请赐教。

SSL / TLS协议和密码套件与AndroidHttpClient

编辑:道歉,如果我原来的职位措辞不佳。 这引起了一些混乱,以原文的评论为代表。 所以让我再试一次: 我从一个问题开始。 我想解决Android上的一个问题,但不知道如何。 我花了很多时间在networking上寻找解决scheme,但没有发现任何关于这个问题的讨论。 尽pipe如此,包括StackOverflow线程在内的一些讨论让我看到了一种看起来很有前途的技术。 我解决了这个问题。 但是解决scheme有一点涉及。 所以我决定在这里提出这个问题,思考a)必须有一个更好的解决scheme,希望有人知道并张贴在这里回答; 或者b)也许这是一个很好的解决scheme,因为我没有在networking上的其他任何地方find这个问题的讨论,也许我对这个问题的解决scheme对其他人试图做同样的事情是有用的。 无论哪种方式,结果将是一个新的贡献StackOverflow:一个问题是没有回答其他地方,最终,正确的答案是这样或那样。 实际上,StackOverflow甚至邀请我通过分享我最初发布的知识来回答我自己的问题。 事实上,这是我的一部分动机。 即使这件事情的事实并不是我find的任何地方。 所以: 问:使用AndroidHttpClient通过HTTPS发出REST请求时,如何指定要使用的SSL协议和密码? 这个很重要。 很重要的一点是,在服务器上可以做很多事情,但是有限制。 同一台服务器必须提供浏览器,包括旧的,以及其他客户端。 这意味着服务器必须支持各种协议和密码。 即使在Android中,如果你必须支持很多不同的版本,你将不得不支持一些不同的协议和密码。 更重要的是,默认情况下,在SSL握手期间,OpenSSL尊重客户端的密码首选项, 而不是服务器的首选项。 例如,看到这个post ,说你可以通过设置SSL_OP_CIPHER_SERVER_PREFERENCE覆盖客户端的行为。 这个选项甚至可以在Java中的SSLSocket上设置,这并不完全清楚。 即使可以,您也可以自己设置密码列表,或者告诉客户端遵守服务器列表。 否则,你会得到Android的默认值,无论它运行在哪个版本上(不是你链接的版本)。 如果采取默认设置,客户端通过Jellybean 4.2+客户端发送到服务器的首选项列表可以在这里看到,从第504行开始。默认的协议列表始于620行左右。虽然Jellybean 4.2+支持OpenSSL 1.0.1,特别是TLSv1.1和TLSv1.2,这些协议默认是不启用的。 如果你不做类似我所做的事情,那么尽pipe事实上TLSv1.2的支持是在最新版本的Android上公布的,但你不能利用TLSv1.2的支持。 当你回顾以前的Android版本时,细节差别很大。 至less,您可能希望仔细看看所有受支持版本的默认值,并查看您的客户端实际在做什么。 你可能会感到惊讶。 关于对各种协议和密码的支持还有很多。 问题是,有时可能需要在客户端更改这些设置。 A.使用一个自定义的SSLSocketFactory 这对我来说很好,最后也不是很多代码。 但是由于几个原因,这有点棘手: 有两个不同的SSLSocketFactory类。 客户需要一个org.apache.http.conn.ssl.SSLSocketFactory,但是OpenSSL返回一个javax.net.ssl.SSLSocketFactory。 这绝对是令人困惑的。 我使用了代表团,让他们打电话给对方,没有什么问题。 注意OpenSSLContextImpl和SSLContextImpl之间的区别。 一个只包裹另一个,但它们不能互换。 当我使用SSLContextImpl.engineGetSocketFactory方法时,我忘记了究竟发生了什么,但是却悄然失败了。 确保使用OpenSSLContextImpl来获取套接字工厂,而不是SSLContextImpl。 您可能也可以使用javax.net.ssl.SSLSocketFactory.getDefault(),但我不确定。 您不能轻易子类AndroidHttpClient,因为它的构造函数是私有的。 这是不幸的,因为它提供了一些其他的好东西,比如确保你正确closures而不是泄露资源。 DefaultHttpClient工作得很好。 我从AndroidHttpClient(第105行)借用了newInstance方法。 […]

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

我在使用HttpsUrlConnection对象获取Android连接到一个简单的OpenSSL服务器时遇到了麻烦(我已经通过StackOverflow和一些在线教程进行了梳理,并且非常HttpsUrlConnection线路的示例,我仍然无法弄清楚为什么当我使用我的本地信任库时我的信息被破坏了)。 我目前有一个Android活动,尝试连接到一个简单的OpenSSL server (我可以使用OpenSSL客户端连接到我的服务器),一旦HttpsUrlConnection.connect()被调用,我收到一个“ javax.net.ssl.SSLException: Connection closed by peer" error during the SSL handshake. 也许我正在设置我的示例服务器不正确? 注意事项: 目前没有客户授权 加载默认信任存储时,能够连接到https://www.google.com 无法使用自签名证书连接到本地主机上的服务器 不想相信所有的证书 不想使用Apache HttpClient 只想使用本地信任库 与充气城堡创build当地的信任存储 我能够正确加载信任库 在代理防火墙后面,在我的android虚拟设备上设置代理 AVD设置为Android 4.1 API 16 。 我已经尝试过的事情: 连接到127.0.0.1 and 10.0.2.2 使用新的SecureRandom() with the SSLContext.init() 使用'URL u = new URL("https", "10.0.2.2", 443, "/");'创buildURL 'URL u = new URL("https", "10.0.2.2", 443, "/");' […]

在Android上通过jni传递byte 到C的问题

我在Java中有一个byte[] ,它的长度是256字节,我把它传递给C中的一个本地函数。 当我试图从这个数组中获取数据时,这是完全错误的,当我把它打印出来的时候,它与我在传递给C之前打印出来的数据不匹配。 我尝试了一些方法来访问数据,包括GetByteArrayRegion和GetByteArrayElements但似乎没有给我所期望的数据。 在我调查的时候,我试图看看JNI认为jbyteArray的长度是在GetArrayLength的长度 – 它报告的长度是1079142960,远远超过了我预期的256个字节。 每次函数被调用时,值也不同,例如GetArrayLength另一次返回1079145720。 这里是我用来访问数组的代码: JNIEXPORT jbyteArray function(JNIEnv* env, jbyteArray array) { int length = (*env)->GetArrayLength(env, array); jbyte data[256]; (*env)->GetByteArrayRegion(env, array, 0, 256, data); //also tried //jbyte *data = (jbyte*) (*env)->GetByteArrayElements(env, array, NULL); } 这看起来很简单,所以我不确定发生了什么事情。 这个数组在Java中看起来很好,但是它是在C中生成的,并且传回来了,所以我想在这里Java可以不关心,但是当它返回到C时会中断数组。 以下是我用来生成数组并将其传回给Java的代码: //there is some openSSL stuff here that sets up a pointer to an RSA […]

在Android NDK上构buildOpenSSL

我想在Android 2.1 / 2.2上使用JNI使用DTLS(在OpenSSL上)。 有人可以帮助我开始(教程,howto,指针等)与build设OpenSSL Android(2.1 / 2.2)使用Android NDK? 任何重要的事情,我应该在做之前知道。 谢谢。