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

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


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

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

  2. 生成 .keystore 文件
    打开终端,执行以下命令(参数需根据实际情况调整):

    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 备案):

    keytool -list -v -keystore [文件名].keystore
    

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


二、提取公钥

  1. 导出公钥文件(.cer)
    执行命令将公钥导出为 .cer 格式:

    keytool -exportcert -alias [证书别名] -file [公钥文件名].cer -keystore [文件名].keystore
    
  2. 转换为 PEM 格式并查看公钥
    使用 openssl 工具转换格式并提取公钥内容:

    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 的密码):

    keytool -importkeystore -srckeystore [文件名].keystore -destkeystore [文件名].p12 -deststoretype PKCS12
    
  2. 提取 PEM 格式的证书
    使用 openssl 从 PKCS12 文件中导出证书:

    openssl pkcs12 -in [文件名].p12 -nokeys -out [证书名].pem -nodes
    

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

  3. 获取 MD5 签名
    对导出的 PEM 证书计算 MD5 指纹:

    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),切换到旧版本后执行:

    keytool -list -v -keystore [文件名].keystore
    

    旧版 keytool 会显示 MD5 签名。

  2. 使用 Docker 运行旧版 Java
    若无旧版 Java,可通过 Docker 快速启动一个 Java 8 环境:

    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 中查看 iOS 证书的 MD5 指纹,需通过 钥匙串访问(Keychain Access)终端命令 提取证书信息。以下是具体步骤:


方法一:通过钥匙串访问(图形界面)

  1. 打开钥匙串访问
    在 macOS 中按 Command + Space,搜索并打开 Keychain Access(钥匙串访问)。

  2. 定位 iOS 证书

    • 在左侧选择 登录系统 钥匙串。
    • 在右侧列表中找到你的 iOS 证书(如 iPhone Developer: Your NameApple Development 类型)。
  3. 导出证书为文件

    • 右键点击证书 → 导出 → 保存为 .cer 文件(如 ios_cert.cer)。
  4. 使用终端查看 MD5 指纹
    打开终端,执行以下命令:

    openssl x509 -in ios_cert.cer -inform der -noout -fingerprint -md5
    
    • 输出示例
      MD5 Fingerprint=12:A3:45:67:89:AB:CD:EF:12:A3:45:67:89:AB:CD:EF
      

方法二:直接通过终端(无需导出文件)

  1. 查找证书的 SHA-1 哈希
    在终端输入以下命令,列出钥匙串中所有证书的 SHA-1 哈希:

    security find-identity -v -p codesigning
    
    • 输出中找到你的 iOS 证书对应的 SHA-1 哈希(如 A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2)。
  2. 提取证书并计算 MD5
    通过 SHA-1 哈希直接导出证书数据并计算 MD5:

    security find-certificate -c "iPhone Developer: Your Name" -p login.keychain | openssl x509 -noout -fingerprint -md5
    
    • "iPhone Developer: Your Name" 替换为你的证书名称。

方法三:使用 .p12 文件提取 MD5

如果已有 iOS 证书的 .p12 文件(私钥文件),可通过以下步骤:

  1. .p12 转换为 PEM 证书

    openssl pkcs12 -in your_cert.p12 -clcerts -nokeys -out cert.pem -nodes
    
    • 输入 .p12 文件的密码。
  2. 查看 MD5 指纹

    openssl x509 -in cert.pem -noout -fingerprint -md5
    

注意事项

  1. MD5 的格式要求

    • 如果目标平台需要 去除冒号,可通过命令处理:
      openssl x509 -in cert.pem -noout -fingerprint -md5 | awk -F '=' '{gsub(/:/,"",$2); print $2}'
      
    • 输出示例:12A3456789ABCDEF12A3456789ABCDEF
  2. 证书类型差异

    • 开发证书:名称类似 iPhone Developer: Your Name (XXXXXX)
    • 发布证书:名称类似 Apple Distribution: Your Team (XXXXXX)
  3. 安全性提示

    • MD5 已不推荐用于加密用途,但某些旧系统可能仍要求提供。
    • 确保私钥文件(.p12)和证书文件(.cer)妥善保管,避免泄露。

常见问题

  • 报错 openssl: command not found
    需安装 OpenSSL:

    brew install openssl
    
  • 找不到证书名称
    在钥匙串访问中检查证书是否已安装,或尝试通过 SHA-1 哈希直接定位。


通过以上任一方法,均可准确获取 iOS 证书的 MD5 指纹。推荐使用 方法一(图形界面导出后通过终端提取),操作直观且兼容性最佳。

更多推荐