通过 Windows 中的 OpenSSL 为我的 Android 应用程序创建带有自签名证书的 PKCS#12 文件
Posted
技术标签:
【中文标题】通过 Windows 中的 OpenSSL 为我的 Android 应用程序创建带有自签名证书的 PKCS#12 文件【英文标题】:Create PKCS#12 file with self-signed certificate via OpenSSL in Windows for my Android App 【发布时间】:2013-12-25 01:42:49 【问题描述】:我正在编写一个 android 应用程序,该应用程序需要对某些 Web 请求进行 SSL 认证。我需要使用自签名证书构建一个 PKCS12 文件 (.pfx
)。
我决定使用 OpenSSL 库,但无法在我的计算机(Windows x64 平台)上构建它。我想在没有安装 ActivePerl 的情况下做到这一点。谁知道构建它的简单方法?
我试图在我朋友的计算机(使用 OpenSSL、Linux)上使用 OpenSSL 构建 PKCS12 文件,但我什么也没得到。谁能帮助我,并描述使用私钥和自签名公共证书生成 PKCS12 文件的操作顺序?
【问题讨论】:
您是否使用 Eclipse 进行 Android 开发? @Plo_Koon 是的。我使用 Eclipse-ADK。 要生成自签名证书,您可以使用一个名为“keytool”的程序,该程序随任何版本的 Java SDK 提供。看到这个链接community.jboss.org/wiki/… 感谢您的链接,但我决定使用 OpenSSL) 【参考方案1】:Win32 OpenSSL 安装项目致力于提供 OpenSSL 的简单安装。通过简单、有效的安装程序,它易于设置和使用。无需编译或跳过任何环节,只需单击几下即可安装,让您做真正的工作。你可以得到它here。在您的情况下,您需要 Win64 OpenSSL v1.0.1e
安装程序。
这些说明展示了如何生成适用于 HTTPS、FTPS 的 PKCS#12 私钥和公共证书文件。 这些说明假定您已下载并安装了 OpenSSL 的 Windows 二进制分发版。
1.生成 RSA 私钥:
>C:\Openssl\bin\openssl.exe genrsa -out <Key Filename> <Key Size>
地点:
<Key Filename>
是私钥文件所需的文件名
<Key Size>
是所需的密钥长度,1024、2048 或 4096
例如,输入:
>C:\Openssl\bin\openssl.exe genrsa -out my_key.key 2048
.
2。生成证书签名请求:
在 0.9.8h 及更高版本中:
>C:\Openssl\bin\openssl.exe req -new -key <Key Filename> -out <Request Filename> -config C:\Openssl\bin\openssl.cfg
地点:
<Key Filename>
是之前生成的私钥的输入文件名
<Request Filename>
是证书签名请求的输出文件名
例如,输入:
>C:\Openssl\bin\openssl.exe req -new -key my_key.key -out my_request.csr -config C:\Openssl\bin\openssl.cnf
3.按照屏幕上的提示输入所需的证书申请信息。
4.根据请求生成自签名公共证书:
>C:\Openssl\bin\openssl.exe x509 -req -days 3650 -in <Request Filename> -signkey <Key Filename> -out <Certificate Filename>
地点:
<Request Filename>
是证书签名请求的输入文件名
<Key Filename>
是之前生成的私钥的输入文件名
<Certificate Filename>
是公共证书的输出文件名
例如,输入:
>C:\Openssl\bin\openssl.exe x509 -req -days 3650 -in my_request.csr -signkey my_key.key -out my_cert.crt
5.生成 PKCS#12 文件:
>C:\Openssl\bin\openssl.exe pkcs12 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -export -in <Public Certificate Filename> -inkey <Private Key Filename> -out <PKCS#12 Filename> -name "<Display Name>"
地点:
<Public Certificate Filename>
是公共证书的输入文件名,PEM格式
<Private Key Filename>
是私钥的输入文件名
<PKCS#12 Filename>
是pkcs#12格式文件的输出文件名
<Display Name>
是有时会显示在用户界面中的所需名称。
例如,输入:
>C:\Openssl\bin\openssl.exe pkcs12 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -export -in my_cert.crt -inkey my_key.key -out my_pkcs12.pfx -name "my-name"
6. (可选)删除不需要的文件。
此时只需要PKCS#12格式文件,即可删除证书签名请求(.csr
)文件、私钥(.key
)文件、公证书(.crt
) ) 文件。
生成的 PKCS#12 格式文件现在可以在安全 FTP 服务器 - FIPS 中使用。
生成的 PKCS#12 格式 (.pfx) 文件现在可以与 Firefox 浏览器版本 34.0.5 一起使用。
【讨论】:
我使用了这个并遇到了一个应用程序的问题,该应用程序默认证书 PBE 格式为“pbeWithSHA1And40BitRC2-CBC”,而不是格式“pbeWithSHA1And3-KeyTripleDES-CBC”。然后我使用了对我有用的geekflare.com/openssl-commands-certificates 的信息,它只需要 2 个步骤而不是 4 个。【参考方案2】:如果您查看此站点“http://www.sslshopper.com/article-most-common-openssl-commands.html”,它包含您要查找的大部分常用命令。我最近必须为 amazon associates 计划执行此操作,并且发现他们的网站也很有帮助(http://docs.aws.amazon.com/IAM/latest/UserGuide/InstallCert.html#SampleCert).By 顺便说一句,您需要安装 openssl 才能运行它(请参阅:http://slproweb.com/products/Win32OpenSSL.html)。
【讨论】:
感谢您的回答和有用的链接)【参考方案3】:我使用了https://geekflare.com/openssl-commands-certificates/ 的信息,只用了两步就成功了:
openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:4096 -keyout mykey.key -out mypem.pem
openssl pkcs12 -export -out myp12.p12 -inkey mykey.key -in mypem.pem
【讨论】:
以上是关于通过 Windows 中的 OpenSSL 为我的 Android 应用程序创建带有自签名证书的 PKCS#12 文件的主要内容,如果未能解决你的问题,请参考以下文章
我必须对我的 xampp (Windows) 上的 OpenSSL 扩展工作做些啥? :( [复制]
在 Windows 上不使用 OpenSSL 从 pfx 文件或证书存储中提取私钥
在 Visual Studio 2012 Ultimate 中的 Windows 中使用 OpenSSL 时出错