macos uni-app 如何生成安卓APP的公钥和签名

问题1:macos uni-app 如何生成安卓APP的公钥和签名

在 macOS 环境下,使用 uni-app 生成安卓 APP 的公钥和签名,主要涉及 生成签名证书(.keystore 文件)提取公钥 两个核心步骤。以下是详细操作流程:


一、生成 Android 签名证书(.keystore 文件)

  1. 安装 Java 环境

    确保 macOS 已安装 Java 开发环境(JRE/JDK),可通过终端输入 java -version 验证。若未安装,需从 Oracle 官网 下载 JDK 并安装。

  2. 生成 .keystore 文件

    打开终端,执行以下命令(参数需根据实际情况调整):

    bash 复制代码
    keytool -genkey -alias [证书别名] -keyalg RSA -keysize 2048 -validity 36500 -keystore [文件名].keystore
    • 参数说明
      • -alias:证书别名(自定义,如 myapp)。
      • -keystore:生成的证书文件名(如 myapp.keystore)。
      • -validity:证书有效期(单位:天,建议设置较长如 36500)。
    • 操作提示
      • 按提示输入密钥库口令(密码)、开发者信息(姓名、组织、地区等)。
      • 生成的文件默认保存在当前终端路径,建议指定完整路径(如 /Users/username/Documents/myapp.keystore)。
  3. 验证证书信息

    通过以下命令查看证书详情,获取 MD5 签名(用于微信开放平台或 App 备案):

    bash 复制代码
    keytool -list -v -keystore [文件名].keystore

    输入密钥库口令后,在输出结果中找到 MD5 值。


二、提取公钥

  1. 导出公钥文件(.cer)

    执行命令将公钥导出为 .cer 格式:

    bash 复制代码
    keytool -exportcert -alias [证书别名] -file [公钥文件名].cer -keystore [文件名].keystore
  2. 转换为 PEM 格式并查看公钥

    使用 openssl 工具转换格式并提取公钥内容:

    bash 复制代码
    openssl x509 -inform der -in [公钥文件名].cer -pubkey -noout

    终端会直接输出公钥字符串(以 -----BEGIN PUBLIC KEY----- 开头)。


三、在 uni-app 中配置签名

  1. 打包时使用证书

    在 HBuilderX 中,选择 发行 > 原生 App 云打包,填写以下信息:

    • 证书别名:与生成时设置的别名一致。
    • 证书私钥密码:密钥库口令。
    • 证书文件 :选择生成的 .keystore 文件。
  2. 备案与平台配置

    • App 备案 :将生成的 MD5 签名公钥 填写至备案平台(如腾讯云)。
    • 微信开放平台:若应用使用微信登录/支付,需确保微信开放平台配置的签名与 MD5 值一致。

注意事项

  1. 证书安全.keystore 文件是应用的核心身份标识,需妥善保存,避免泄露或丢失。
  2. 有效期设置:建议证书有效期足够长(如 100 年),避免频繁更新。
  3. 环境问题 :若终端提示权限不足,可在命令前添加 sudo 执行。

以上步骤综合了 macOS 环境适配、uni-app 打包流程及公钥提取方法,适用于大多数场景。如需进一步简化操作,可使用在线工具(如 Application Loader)一键生成证书。

问题2:keytool -list -v -keystore [文件名].keystore 输入命令后,只有 SHA1和 SHA256 ,没有看到MD5 签名

您遇到的情况是因为较新版本的 Java keytool 默认不再显示 MD5 签名(出于安全考虑,MD5 被认为不够安全)。但部分平台(如某些应用备案系统)仍要求提供 MD5 签名。以下是 两种解决方案


方案一:通过 openssl 手动提取 MD5 签名

  1. 将 .keystore 转换为 PKCS12 格式

    执行以下命令(需要输入 keystore 的密码):

    bash 复制代码
    keytool -importkeystore -srckeystore [文件名].keystore -destkeystore [文件名].p12 -deststoretype PKCS12
  2. 提取 PEM 格式的证书

    使用 openssl 从 PKCS12 文件中导出证书:

    bash 复制代码
    openssl pkcs12 -in [文件名].p12 -nokeys -out [证书名].pem -nodes

    输入 PKCS12 文件的密码(与 keystore 密码相同)。

  3. 获取 MD5 签名

    对导出的 PEM 证书计算 MD5 指纹:

    bash 复制代码
    openssl x509 -in [证书名].pem -noout -fingerprint -md5

    输出类似:
    MD5 Fingerprint=XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX


方案二:强制 keytool 显示 MD5(需旧版 Java)

  1. 临时切换旧版 Java 环境

    如果您安装了多版本 JDK(如 JDK 8),切换到旧版本后执行:

    bash 复制代码
    keytool -list -v -keystore [文件名].keystore

    旧版 keytool 会显示 MD5 签名。

  2. 使用 Docker 运行旧版 Java

    若无旧版 Java,可通过 Docker 快速启动一个 Java 8 环境:

    bash 复制代码
    docker run --rm -v $(pwd):/data openjdk:8-jdk \
      keytool -list -v -keystore /data/[文件名].keystore

    执行后会将当前目录挂载到容器中,直接显示 MD5 签名。


关键原因说明

  • Java 版本差异 :Java 9+ 的 keytool 默认隐藏 MD5,优先显示 SHA-256 和 SHA-1。
  • 兼容性需求:若目标平台(如备案系统)强制要求 MD5,需通过上述方法获取。

替代建议

如果目标平台允许,建议直接使用 SHA-256 签名(更安全),避免依赖 MD5。

问题3:macOS 证书生成了,如何查看证书MD5的值

在 macOS 中,如果通过 keytool 生成的证书没有直接显示 MD5 值(常见于较新版本的 Java),可以通过以下步骤安全提取 MD5 指纹:


方法一:使用 openssl 手动提取(推荐)

1. 将 .keystore 转换为 PKCS12 格式
bash 复制代码
keytool -importkeystore -srckeystore your.keystore -destkeystore temp.p12 -deststoretype PKCS12
  • 操作说明
    • your.keystore:你的证书文件名。
    • temp.p12:生成的临时 PKCS12 文件。
    • 输入原 .keystore 的密码(密钥库口令)。
2. 导出 PEM 格式的证书
bash 复制代码
openssl pkcs12 -in temp.p12 -nokeys -out cert.pem -nodes
  • 输入 PKCS12 文件的密码(与上一步一致)。
3. 提取 MD5 指纹
bash 复制代码
openssl x509 -in cert.pem -noout -fingerprint -md5
  • 输出示例

    复制代码
    MD5 Fingerprint=12:A3:45:67:89:AB:CD:EF:12:A3:45:67:89:AB:CD:EF
  • 直接复制 = 后的字符串(去掉空格和 MD5 Fingerprint 前缀)。

4. 清理临时文件(可选)
bash 复制代码
rm temp.p12 cert.pem

方法二:强制 keytool 显示 MD5(需旧版 Java)

1. 使用 Java 8 或更低版本

如果你已安装旧版 JDK(如 JDK 8),切换到对应版本后直接运行:

bash 复制代码
keytool -list -v -keystore your.keystore
  • 旧版 keytool 会显示完整的 MD5 值。
2. 通过 Docker 快速获取(无需安装旧版 Java)
bash 复制代码
docker run --rm -v $(pwd):/data openjdk:8-jdk \
  keytool -list -v -keystore /data/your.keystore
  • 输入密码后,直接显示 MD5 签名。

关键注意事项

  1. MD5 的格式要求

    • 如果目标平台需要 去除冒号 (如 12A3456789ABCDEF12A3456789ABCDEF),可直接用文本编辑器替换。

    • 示例命令(在终端中处理):

      bash 复制代码
      echo "12:A3:45:67:89:AB:CD:EF:12:A3:45:67:89:AB:CD:EF" | tr -d ':'
  2. 安全性提示

    • MD5 已不推荐用于加密场景,但某些备案系统仍会要求提供。
    • 确保私钥文件(.keystore不要泄露,它是应用签名的唯一凭证。

常见问题

  • 报错 openssl: command not found

    需安装 OpenSSL:

    bash 复制代码
    brew install openssl
  • 生成的 MD5 与平台要求不符

    检查是否复制了完整的指纹(16组十六进制值),或尝试重新生成证书。


通过上述任一方法,均可准确获取证书的 MD5 值。推荐使用 方法一openssl),无需依赖旧版 Java 环境。

相关推荐
还鮟4 小时前
CTF Web的数组巧用
android
小蜜蜂嗡嗡5 小时前
Android Studio flutter项目运行、打包时间太长
android·flutter·android studio
aqi005 小时前
FFmpeg开发笔记(七十一)使用国产的QPlayer2实现双播放器观看视频
android·ffmpeg·音视频·流媒体
耶啵奶膘5 小时前
uniapp——地图路线绘制map
uni-app
shadouqi5 小时前
uniapp实现图片预览,懒加载,下拉刷新等
uni-app
zhangphil7 小时前
Android理解onTrimMemory中ComponentCallbacks2的内存警戒水位线值
android
走,带你去玩7 小时前
uniapp 微信小程序水印
微信小程序·小程序·uni-app
你过来啊你7 小时前
Android View的绘制原理详解
android
梅名智7 小时前
IOS 蓝牙连接
macos·ios·cocoa
菌菇汤9 小时前
uni-app实现单选,多选也能搜索,勾选,选择,回显
前端·javascript·vue.js·微信小程序·uni-app·app