【问题标题】:creating certificate for android volley and nodejs为 android volley 和 nodejs 创建证书
【发布时间】:2016-05-28 17:19:52
【问题描述】:

我正在开发一个可以与多个节点服务器连接的安卓应用程序。此连接需要安全,因此我需要证书。但我不能支付证书。作为我的研究,我将为每台服务器创建证书并使用我自己的根证书对其进行签名(我也需要它)。然后我将根证书固定到我的 android 应用程序中。所以我可以从一个安卓应用程序连接多个服务器。但我不知道如何创建此证书以及如何将其固定到 android 应用程序中。

【问题讨论】:

  • 您在询问 SSL 证书吗?
  • 是的。我需要创建证书。我正在使用窗户。我找到了一个可以创建和管理证书的工具,但它没有用。我尝试使用 chrome,但出现错误。我还读到我需要用于 android 的 bks 密钥库。我不明白如何创建它。
  • 如果您不想处理证书生成和信任库,我建议您使用受信任的权威。试试letsencrypt.org。这是免费的。如果您更喜欢使用自己的证书,请在 SO 中搜索如何操作以及如何配置您的特定服务器。这个问题很大
  • 我的端点没有域名。像路由器一样思考。我正在开发像路由器这样的设备,用户可以通过静态 ip 或动态 dns 或本地使用它。据我所知,我无法使用 CA。
  • CA 可以生成绑定到 IP 的证书,但这并不常见。我同意在这种情况下使用自生成证书更合适。您需要 1)创建 SSL 证书 2)配置您的服务器 3)将证书的公钥和链添加到 android 应用程序的信任库。我可以为您提供一些有用的链接

标签: android node.js ssl certificate pinning


【解决方案1】:

CA 可以生成绑定到 IP 的证书,但这并不常见。我同意在这种情况下使用自生成证书更合适。你需要

1) 创建 CA 证书和 SSL 证书

提取自here 你需要openssl

创建 CA 证书

openssl genrsa -out rootCA.key 2048
openssl genrsa -des3 -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

这将启动一个交互式脚本,它会询问您各种信息。你会得到rootCA.pem

为每台设备创建一个证书

 openssl genrsa -out device.key 2048
 openssl req -new -key device.key -out device.csr      
 openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 500 -sha256

在第二步中,您将被问到各种问题(国家、州/省等),在“通用名称”中插入您设备的 IP 或名称。匹配真实姓名很重要,因为浏览器或Android设备会验证它

2) 配置你的 nodejs 服务器以使用 https 我对node.js的了解不够,无法给你很好的解释或链接,所以使用官方文档。也许一些读者可以编辑这个并提供一个链接

3) 将公钥和证书链添加到安卓应用的信任库中。

中提取here

你需要

1) 获取 CA 证书的公共部分

2) 创建 BKS 密钥库并导入证书(只需要 root)

3) 在您的应用中使用密钥库。创建一个自定义 Apache HTTP 客户端,该客户端使用您的密钥库来配置 de SSL 连接

详细信息在链接中,即在社区 wiki 中。

适用于 Android Volley。 Using Android Volley With Self-Signed SSL Certificate

【讨论】:

  • 我对第二步有一些疑问。创建证书时,如果我输入设备的公共 ip,我可以从本地网络使用私有 ip(如(192.168.1.1))访问它。我想同时使用公共和私人地址访问此设备。是否可以?而且我不明白设备名称的术语。你说的是主机名吗?
  • 我想说主机名。如果您将证书的公用名(主机名)设置为 IP,那么它将仅对该 IP 有效。如果你想使用私有和公共访问,你需要两个证书和两个端点,或者使用 DNS 名称而不是 IP 地址
  • 是的,我正在考虑使用动态 dns。所以我不需要为我的端点支付静态地址的费用。但是如果我使用它,我不能在没有互联网连接的情况下在本地使用我的端点。如果 ssl 提供了多个公用名的选项或不检查公用名,那将解决我的问题。
  • 证书可以有唯一的主机名(ip 或名称)。还有可以服务于多个域的通配符证书:* .mydomain.com。在您的情况下,我认为您还可以自定义 Android HostnameVerifier 以支持您的特定主机名
猜你喜欢
  • 2016-06-30
  • 2017-09-01
  • 2014-12-12
  • 2020-09-28
  • 1970-01-01
  • 2020-09-27
  • 2011-04-28
  • 1970-01-01
  • 2011-12-29
相关资源
最近更新 更多