如何在 Android 上获取 OAuth 2.0 的签名证书指纹 (SHA1)?

Posted

技术标签:

【中文标题】如何在 Android 上获取 OAuth 2.0 的签名证书指纹 (SHA1)?【英文标题】:How to obtain Signing certificate fingerprint (SHA1) for OAuth 2.0 on Android? 【发布时间】:2012-08-26 05:16:30 【问题描述】:

我正在尝试按照https://developers.google.com/console/help/#installed_applications 中的步骤注册我的 android 应用程序,这导致我遵循 http://developer.android.com/tools/publishing/app-signing.html.

但是,我不确定如何获取签名证书指纹 (SHA1)。

我首先使用 Eclipse ADT 插件来导出和创建密钥库/密钥。 然后,我尝试做keytool -list keystore mykeystore.keystore,它给了我一个 MD5 证书指纹。我是否需要重做签名(意味着我不能使用 eclipse 导出向导)?

我可以先使用调试证书吗?

【问题讨论】:

在导出/上传您的应用之前,请使用 user2453771 的答案。导出/上传后使用 frederick nyawaya 的回答。记住这一点,并为自己节省几个小时的痛苦。 如何使用linux终端生成release apk keystore 获取 SHA-1 用于发布和调试模式 android studio gradle 的最简单方法。 Check this 【参考方案1】:

看看你当时是否想使用Google Map,你需要MD5指纹来生成api kay,以便在你的android应用程序中使用谷歌地图。

如果你使用JDK 1.6,Keytool 命令会生成MD5 指纹,如果你使用JDK 1.7,它会生成SHA1 指纹。

所以问题是,如果您想签署您的应用程序以进行发布,请阅读this。

如果你想使用google-map,请阅读this。

【讨论】:

感谢 Akshay 的重播。显然我需要在我的 keytool 命令中添加 -v 以显示其他证书指纹。另外,显然我可以使用调试证书来创建客户端 ID。 主要是。我解决了创建客户 ID 的问题。但是,我一般是 OAuth 新手,而不是证书和指纹如何工作。我猜证书可以同时具有 MD5 和 SHA1 指纹?至少这是我执行keytool -list -v etc 命令时得到的结果【参考方案2】:

在命令行中使用它

c:\Program Files\Java\jdk1.6.25\bin>keytool -list -v -keystore c:\you_key_here.key

【讨论】:

随着越来越多的人迁移到 IntelliJ/ Studio 并且无法使用 Eclipse/ADT 的易用性,我觉得这是最简单但也是标准的方式。干杯队友! 为什么要我输入密码 我知道了,访问被拒绝!【参考方案3】:

对于使用 OpenSSL 的用户,您可以通过以下方式检索 SHA1 指纹:

OpenSSL> dgst -sha1 my-release-key.keystore

这将导致以下输出:

【讨论】:

【参考方案4】:

打开终端(在 Unix 中,在 MAC 中),(cmdWindows 中)和 cd 到这个(你的 java ) 路径:

C:\Program Files\Java\jdk1.6.0_43\bin>

运行这个命令:

keytool -list -v -keystore C:\Users\leon\.android\debug.keystore -alias androiddebugkey -storepass android -keypass android

只需将路径更改为debug.keystore,您将获得 MD5 和 SHA-1 指纹。

【讨论】:

【参考方案5】:
keytool -list -v -keystore "keyStoreName"

从应用的密钥库所在的目录运行此命令。

【讨论】:

这可用于获取您将导出和发布的客户端应用程序的 SHA1。这可能与您在 eclipse 中看到的不同,后者是一个调试密钥库。【参考方案6】:

启动导出过程,为您的应用创建 apk 并使用您的生产密钥。最后一页显示您的 SHA1 和 MD5 证书指纹

【讨论】:

MD5 现在出现在 logcat 中(不在创建期间的窗口中)。 执行两次导出过程。将在第二回合显示。 有没有办法使用这种方法创建一个新的?我试图这样做,但我的旧密钥库文件在那里,但我认为它是错误的(我需要调试证书,而不是发布证书),而且我忘记了密码。 >_ 注意:您不必完全导出 .apk。您可以在复制 SHA1 后此时取消,以避免创建不必要的 .apks。【参考方案7】:

我知道这个问题已经得到解答,但这就是我找到默认密钥库签名的方式。在 Eclipse 中,如果您转到 Windows -> Preferences -> Android -> Build

【讨论】:

这应该是公认的答案,因为它是最简单的方法。 对于默认/调试密钥库,而不是生产密钥库 请注意,安全答案是@frederick nyawaya 的。如果您的应用程序有不同的构建和发布密钥存储(大多数情况下,地图将无法在您的客户端上运行。天知道您什么时候会知道这一点,因为它在您自己的计算机上运行良好。请小心。这很容易,但您最终可能会在客户端设备上获得无法正常工作的地图服务。【参考方案8】:

试试这个: Windows----preferences----Android--build---sh1 从这里复制代码

【讨论】:

【参考方案9】:

如果您使用的是 IntelliJ(12 岁以上?),请转到菜单 Build/Generate signed Api

填写弹窗后,获取“key store path”字段中的数据(例如C:\Users\user\Documents\store\store)

并在命令行中运行:

>keytool -list -v -keystore "C:\Users\user\Documents\store\store"

....
         MD5: 11:C5:09:73:50:A4:E5:71:A2:26:13:E0:7B:CD:DD:6B
    -->  SHA1: 07:0B:0E:E8:F7:22:59:72:6A:1C:68:05:05:CF:2E:6F:59:43:48:99
         SHA256: E6:CE:DA:37:C1:18:43:C1:A3:F0:9E:8F:1A:C2:69:AF:E6:41:F7:C0:18:
1D:1D:55:5D:F0:52:6C:EE:77:84:A7
...

祝你好运

【讨论】:

【参考方案10】:

如果您使用的是 Mac 甚至 Linux,只需将其复制并粘贴到 Terminal 应用程序中,您就会立即获得 SHA1 密钥。无需更改任何内容。

 keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android

示例输出:

Alias name: androiddebugkey
Creation date: 17 Feb 12
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Android Debug, O=Android, C=US
Issuer: CN=Android Debug, O=Android, C=US
Serial number: 4f3dfc69
Valid from: Fri Feb 17 15:06:17 SGT 2012 until: Sun Feb 09 15:06:17 SGT 2042
Certificate fingerprints:
     MD5:  11:10:11:11:11:11:11:11:11:11:11:11:11:11:11:11
     SHA1: 11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:01:11
     Signature algorithm name: SHA1withRSA
     Version: 3

【讨论】:

@yuku 示例请。 /home/desktop/././. , abc.jks, 哪个密码,我们需要所有这些细节吗?? keytool -list -v -keystore my-release-key.keystore JKS 密钥库使用专有格式。建议迁移到行业标准格式 PKCS12,使用“keytool -importkeystore -srckeystore /.keystore -destkeystore /.keystore -deststoretype pkcs12".【参考方案11】:

对于那些在 mac 上寻找 keytool 的人。请按照以下步骤操作:

首先确保安装Java JDK http://docs.oracle.com/javase/7/docs/webnotes/install/mac/mac-jdk.html

然后在命令提示符中输入:

/usr/libexec/java_home -v 1.7

它会吐出类似的东西:

/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home

keytool 与javac 位于同一目录中。即:

/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/bin

您可以从 bin 目录中使用 keytool。

【讨论】:

【参考方案12】:

我认为这将完美地工作。我也用过:

对于 Android Studio:

    点击构建 > 生成签名的APK。 您将看到一个消息框,只需单击“确定”。 现在将出现另一个窗口,只需复制 Key Store Path。 现在打开命令提示符并转到 C:\Program Files\Java\jdk1.6.0_39\bin>(或任何已安装的 jdk 版本)。 键入 keytool -list -v -keystore,然后粘贴您的 Key Store 路径(例如 C:\Program Files\Java\jdk1.6.0_39\bin>keytool -list -v -keystore "E:\My Projects\Android\android studio\signed apks\Hello World\HelloWorld.jks")。 现在它将询问 Key Store 密码,提供您的密码并按 Enter 以获取您的 SHA1 和 MD5 证书密钥。

【讨论】:

通过其他机器创建的密钥库文件我可以在不同的机器上获得具有相同密钥库文件的 sh1【参考方案13】:

如果有人使用Android studio...

单击:构建 > 生成已签名的 APK 创建一个新密钥:这将生成“.jks”文件

使用以下命令读取数据(SHA1 和其他信息):

$ keytool -list -v -keystore 文件名.jks

【讨论】:

额外提示:为facebook$keytool -keystore filename.jks | openssl sha1 -binary | openssl base64生成密钥哈希的命令【参考方案14】:

如果您使用的是 Android Studio。您可以通过Gradle Tasks快速获取SHA1证书指纹(调试、发布...所有构建类型!!):

签名报告

SHA1 显示在消息日志

Android 插件(在 gradle 应用程序中配置)默认创建调试模式。

com.android.application

到密钥库的文件路径:

HOME/.android/debug.keystore

我推荐 附加 debug.keystore 到 build.gradle。为此,将文件 debug.keystore 放入 app 文件夹,然后在 gradle app 中添加 SigningConfigs:

apply plugin: 'com.android.application'

    android 
        ................
        signingConfigs 
            debug 
                storeFile file("../app/debug.keystore")
                storePassword "android"
                keyAlias "androiddebugkey"
                keyPassword "android"
            
            release 
                storeFile file("../app/debug.keystore")
                storePassword "android"
                keyAlias "androiddebugkey"
                keyPassword "android"
            
            
        ........
    

额外:如果要创建发布,请将文件 release.keystore 放入应用文件夹。 (本示例使用相同的 debug.keystore)

【讨论】:

【参考方案15】:

如果您使用的是 Android Studio。您不需要使用 cmd 提示符生成 SHA1 指纹。您只需要使用 Android Studio 的默认 Maps Activity 创建一个项目。在该项目中,您可以在 Values 文件夹下的 google_maps_api.xml 中获取指纹。希望这会帮助你。 :)

【讨论】:

【参考方案16】:

使用portecle:

文件 > 打开密钥库文件 输入密钥库密码 右键单击别名 > 证书详细信息 > SHA-1 指纹

【讨论】:

【参考方案17】:

在 Android Studio 中,按照以下步骤操作:

    点击 android studio IDE 右侧的 Gradle 属性菜单。 展开任务树。 点击签约举报 您可以在底部控制台看到您的 SHA1

【讨论】:

【参考方案18】:

获取 SHA-1 用于发布和调试模式 android studio gradle 的最简单方法。 Check this

【讨论】:

【参考方案19】:

我认为这将完美地工作。我也用过:

对于 Android Studio:

点击构建 > 生成签名的 APK。 您将看到一个消息框,只需单击“确定”即可。

现在将有另一个窗口,只需复制密钥存储路径。

现在打开命令提示符并转到 C:\Program Files\Java\jdk1.6.0_39\bin>(或任何已安装的 jdk 版本)。

键入 keytool -list -v -keystore 然后粘贴您的密钥存储路径(例如 C:\Program Files\Java\jdk1.6.0_39\bin>keytool -list -v -keystore "E:\My Projects \ Android\android studio\signed apks\Hello World\HelloWorld.jks")。

现在它将询问密钥存储密码,提供您的密码并按 Enter 以获取您的 SHA1 和 MD5 证书密钥。

现在将此 SHA1 密钥添加到 Google 开发人员控制台的凭据选项卡中,并将 android studio 中的构建变体更改为发布模式。

【讨论】:

无法输入我输入的密钥库密码,但密码未在命令提示符中输入 密码不可见只需正确输入您的密码并按回车即可获得您的密钥 谢谢,我输入了错误的密码,现在可以了,谢谢大家【参考方案20】:

我第一次很困惑,但我建议你最终的工作解决方案 Windows:

1) 打开 cmd 并转到您的 Java/jdk/bin 目录(只需按 cd .. 后退一个文件夹,按 cd NAME_FOLDER 前进一个文件夹),在我的情况下,最终文件夹:C:\Program Files\Java\jdk1.8.0_73\bin>

2) 现在输入这个命令keytool -list -v -keystore C:\Users\YOUR_WINDOWS_USER\.android\debug.keystore -alias androiddebugkey -storepass android -keypass android

结果你必须得到这样的东西:

【讨论】:

【参考方案21】:

这是我的简单解决方案:

点击Gradle按钮,可以在右上角找到。你会看到所有的 gradle 文件。现在转到android,双击signingReport。 gradle 构建完成后,您会看到 SHA 密钥。查看以下图片以获取分步指南。

单击 Gradle 后,请检查以下图像。希望这对某人有所帮助。

第 1 步:

第 2 步:

【讨论】:

【参考方案22】:

我想向与我有相同问题的人发布通知。我完成了生成调试 SHA-1 和发布 SHA-1 的步骤。我试图将 Google Sign-In API 与我的应用程序连接起来。

我遇到了调试 .apk 可以正常工作的问题,它可以通过 Google 登录进行连接和身份验证。当手动安装到手机上时,我的版本 .apk 也可以使用。当我将发布的 .apk 发布到 Google Play 商店时,我的 google 登录无法通过身份验证,我会遇到问题!

很长一段时间我都想不通,但我发现我的应用正在被谷歌签名,即开发者控制台顶部的消息显示:Google Play App Signing is enabled对于这个应用程序。

我转到“发布管理”选项卡,然后向下滚动到“应用签名”,并在那里找到了 SHA-1。将此添加到我的代码和我用作 Google 登录后端的“firebase 控制台”上后,一切似乎都正常。看起来我的发布密钥库已被谷歌签名证书取代......我不确定这是否正在发生,但它解决了我的问题并允许我的 Google Play 商店发布 apk 正确地通过谷歌签名进行身份验证进来!

【讨论】:

【参考方案23】:

逐步解决方案:

    打开命令提示符或 Mac 终端

    将目录更改为 keytool 文件位置的目录。使用命令cd <directory path> 更改目录。 (注意:如果任何目录名称有空格,则在两个单词之间添加\。例如cd /Applications/Android\ Studio.app//Contents/jre/jdk/Contents/Home/bin/

    要找到你的keytool的位置,你去android studio..打开你的项目。然后去

    文件>项目结构>SDK 位置..并找到 JDK 位置。

    通过以下命令运行 keytool: keytool -list -v –keystore <your jks file path> (注意:如果任何目录名称有空格,则在两个单词之间添加 \。示例 keytool -list -v -keystore /Users/username/Desktop/tasmiah\ mobile/v3/jordanos.jks)

    命令提示你输入密码..所以输入你的密码..然后你得到结果

【讨论】:

【参考方案24】:

如果您使用的是 Mac/Linux,那么您可以通过在终端中写入以下行来获取 SHA1 指纹:

keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android

在这之后有两件事可能发生

    它会要求你输入密码

    只需输入

安卓

然后按回车,您可以在如下所示的输出中找到 SHA1 密钥。

    它会要求你下载一个合适的程序(一些列表会 给)

    只需在终端输入以下内容

sudo apt install openjdk-8-jre-headless

然后在终端再次运行:keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android

这一次,您将被引导到第 1 步,您只需输入密码

安卓

您将在输出下方获得您的 SHA1 指纹。

【讨论】:

【参考方案25】:

这是懒惰的程序员的工具:

1 添加依赖:

compile 'com.vk:androidsdk:1.6.9'

2 在您的活动/应用程序的某处添加以下行:

String[] fingerprints = VKUtil.getCertificateFingerprint(this, getPackageName()); 
Log.d("SHA1", fingerprints[0]);

3 打开 logcat 并捕获消息。

4 利润!

【讨论】:

【参考方案26】:
    打开命令提示符 将工作目录导航到 1.8.0/bin 粘贴keytool -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore 如果它要求您输入密码,请按 Enter

【讨论】:

【参考方案27】:

如果您想从签名 keystore.jks 文件中获取指纹 sha1 密钥 从终端运行以下命令:

keytool -list -v -keystore <.../path/keystore.jks>

例子

keytool -list -v -keystore /Users/Home/Projects/Keystore/myApp_keystore.jks
Enter keystore password: 

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

Alias name:myApp_alias
Owner: CN=xxx, OU=xxx Dev, O=ZZZ, L=Dhaka, ST=Dhaka, C=BD
..........


Certificate fingerprints:
MD5:  12:10:11:12:11:11:11:11:11:11:33:11:11:11:11:11
SHA1: 11:44:11:11:55:11:17:11:11:66:11:11:88:11:11:77:11:11:01:11
.....................

【讨论】:

【参考方案28】:

请点击菜单右侧的 Gradle 然后点击:app 然后点击android文件夹 然后 SigningReport 文件名存在 双击它。 它将开始执行,并在一段时间内向您显示 SHA-1 代码 只需复制代码。 并粘贴到你需要的地方

【讨论】:

【参考方案29】:

在最新版本的 Android Studio 中,获取 SHA-1 密钥的最佳方法是表单终端。 ,

    在 Android Studio 中打开终端 复制 命令(keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android) 将其粘贴到终端并按回车键

【讨论】:

以上是关于如何在 Android 上获取 OAuth 2.0 的签名证书指纹 (SHA1)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android中使用Appcelerator Titanium构建Oauth 2.0

如何在基于WordPress的网站上实现oAuth2?

如何在 C# 中获取 OAuth 2.0 身份验证令牌

如何在到期后使用 OAuth 2.0 以及 iOS 应用程序中的 Youtube API 获取新的访问令牌

使用oauth 2.0中的指纹登录

在这个简单的 Android 应用案例中,我需要 OAuth 2.0 提供啥?