GVKun编程网logo

有没有办法在 Groovy 中使用 JKS Keystore 或 Truststore 为 HTTP 调用实现 SSL?

12

如果您想了解有没有办法在Groovy中使用JKSKeystore或Truststore为HTTP调用实现SSL?的知识,那么本篇文章将是您的不二之选。同时我们将深入剖析AndroidEclipseke

如果您想了解有没有办法在 Groovy 中使用 JKS Keystore 或 Truststore 为 HTTP 调用实现 SSL?的知识,那么本篇文章将是您的不二之选。同时我们将深入剖析Android Eclipse keystore.jks文件生成,根据keystore密钥获取SHA1安全码 ,apk打包、Android Studio apk打包,keystore.jks文件生成,根据keystore密钥获取SHA1安全码、Android studio 签名文件.jks 转 .keystore、Android Studio 默认keystore 以及自定义keystore的各个方面,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

有没有办法在 Groovy 中使用 JKS Keystore 或 Truststore 为 HTTP 调用实现 SSL?

有没有办法在 Groovy 中使用 JKS Keystore 或 Truststore 为 HTTP 调用实现 SSL?

如何解决有没有办法在 Groovy 中使用 JKS Keystore 或 Truststore 为 HTTP 调用实现 SSL??

我编写了一个通过 Nifi 的 ExecuteGroovyScript 处理器运行的 groovy 脚本。它运行良好。但是,我想知道是否有办法使用 SSL 来实现这一点?

我的 unix 服务器上有 JKS Keystore 和 Truststore JKS 文件。

下面是我写的代码:

def flowFile = session.get()

def postResult=''''
def url = new URL("https://xxx.xxx.xxx/sample?key=8B4B4565-313E-462D-8160-175F6F456773")
HttpURLConnection connection = (HttpURLConnection) url.openConnection()
connection.setRequestMethod("GET")
// connection.setConnectTimeout(10000)
connection.connect()
if (connection.responseCode == 200 || connection.responseCode == 201) {
    flowFile = session.putAttribute(flowFile,''api_responce_code'',connection.responseCode.toString())
    flowFile = session.write(flowFile,{outputStream -> outputStream.write(connection.content.getBytes())} as OutputStreamCallback)
    session.transfer(flowFile,REL_SUCCESS)
} else {
    flowFile = session.putAttribute(flowFile,connection.responseCode.toString())
    flowFile = session.putAttribute(flowFile,''api_responce_error'',connection.getErrorStream().toString())
    session.transfer(flowFile,REL_FAILURE)
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Android Eclipse keystore.jks文件生成,根据keystore密钥获取SHA1安全码 ,apk打包

Android Eclipse keystore.jks文件生成,根据keystore密钥获取SHA1安全码 ,apk打包

keystore.jks文件生成,打包APK

选中项目右键-> Android Tools->Export Signed Application Package ,如图:

  

之后

              

点击Next,下图 (建议文件名后缀为.keystore)

            

进入到”Key Creation“界面,完成信息,点击Next

           

完成信息,(选择APK生成的路径)

          

可以到保存路径下看生成的android.keystore文件了

          

接下来APK打包

         

点击之后,选择保存路径:

                

之后APK生成成功

                 

根据keystore密钥获取SHA1安全码

通常做项目大多数都要用到SHA1安全码,比如:地图,获取SHA1安全码的也有两种,分为调试版和发布版,他们的SHA1都是不一样的,

debug测试版:

Window+R 打开控制台  输入cmd点击确定

之后在弹框中完成以下操作就可以看到SHA1安全码了

上图的密钥库口令默认的是:android  (注:输入口令是看不见的,输入完成Enter即可)

发布版(这个版本可以看到测试版和发布版的SHA1):

这个版本就需要我们前面生成的keystore文件了, Custom debug keystore:导入生成的keystore文件,点击Apply生成发布版本的密钥SHA1

Android Studio apk打包,keystore.jks文件生成,根据keystore密钥获取SHA1安全码

Android Studio apk打包,keystore.jks文件生成,根据keystore密钥获取SHA1安全码

keystore.jks文件生成,打包APK
选择Build > Generate Signed APK 出现如下弹框:

 

 

 

然后点击Create new...(创建的意思)出现另一个弹框,在做如下操作,如图

 

完成上信息后,点击OK

 

 

可看到前面填写的一些信息,可以勾选记住密码,点击Next

 

 

之后

 

 

 

之后在点击Finish ,等一小会儿Apk就打包成功了,上图APK Folder是Apk路径,默认是项目根目录。

 

 

根据keystore密钥获取SHA1安全码
通常做项目大多数都要用到SHA1安全码,比如:地图,获取SHA1安全码的也有两种,分为调试版和发布版,他们的SHA1都是不一样的,

debug测试版:

Window+R 打开控制台  输入cmd点击确定

 

 

之后在弹框中完成以下操作就可以看到SHA1安全码了

 

 

上图的密钥库口令默认的是:android  (注:输入口令是看不见的,输入完成Enter即可)

release发布版:

这个版本就需要我们前面生成的keystore.jks文件了,首先找到keystore.jks的目录,然后在AS打包的项目中,点击底部控制台  Terminal  

 

 

出现了操作台,填写相应信息即可,如图:

 

 上图的密钥库口令是你创建keystore.jks文件时输入的密码,  (注:输入口令是看不见的,输入完成Enter即可)

Android studio 签名文件.jks 转 .keystore

Android studio 签名文件.jks 转 .keystore

win+R,输入cmd,打开命令窗口:

然后在命令窗口先输入:

keytool -importkeystore -srckeystore D:\key.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore key.p12

这里面的“key.jks”就是你原来的签名文件,key.p12是临时文件,用来过渡到keystore的一个文件,不用管。

接着会让你输入三遍密码,每次输完都回车,输入界面不会显示你输入的密码,不用管,输完直接回车就好;

三次密码输完后,会生成一个key.p12文件,继续执行下一步操作;
在命令窗口先输入:

keytool -v -importkeystore -srckeystore D:\key.p12 -srcstoretype PKCS12 -destkeystore D:\key.keystore -deststoretype JKS

接着会让你输入三遍密码,每次输完都回车,输入界面不会显示你输入的密码不用管,输完直接回车就好;

三次密码输完后,会生成一个key.keystore文件,这个就是转换成功的文件,可以拿去使用了。

Android Studio 默认keystore 以及自定义keystore

Android Studio 默认keystore 以及自定义keystore

我们使用Android Studio 运行或测试我们的app  它使用一个默认的debug.keystore进行签名。

这个默认签名(keystore)是不需要密码的,它的默认位置在 $HOME/.android/debug.keystore,如果不存在Android studio会自动创建它。

例如我的debug.keystore就在C:\Users\Administrator\.android\debug.keystore。再我们正式发布项目的时候是不能使用debug.keystore的。

官方地址: https://developer.android.com/studio/publish/app-signing.html

 

下面我们来介绍如何使用Android Studio创建一个新的keystore,并发布我们的apk

第一步: Build --->> Generate Signed APK

第二步:Create New

第三步:填写相关信息,里面内容什么含义自行Google

第四步:输入密码

第五步:选择发布app的路径默认即可 选择release方式发布

OK,发布成功,可以到文件夹下面找到发布的apk

 

下面我们来配置如何在debug的时候使用我们自定义的keystore。

第一步:还是要新建一个keystore,就用上面的也可以。

第二步:在项目上右键 Open Module Settings.然后看图就可以了,选择路径,把密码填上,该填的都填好。

第三步:分别选择debug和release 都设置为刚才填进去的keystore。

点击OK即可,然后查看APP的配置文件应该是这样的。

android {
    signingConfigs {
        android_studio_app {
            keyAlias 'androidstudioapp'
            keyPassword 'mypassword'
            storeFile file('D:/Android/keystore/android_studio_app.jks')
            storePassword 'mypassword'
        }
    }
    compileSdkVersion 23
    buildToolsversion "23.0.1"
    defaultConfig {
        applicationId "com.example.administrator.myapplication"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
            signingConfig signingConfigs.android_studio_app
        }
        debug {
            signingConfig signingConfigs.android_studio_app
        }
    }
}

下面讲解如何测试apk是否使用了我们创建的keystore

第一步: keytool -list -v -keystore  xxx.keystore 

通过工具查看sha1的值.,例如 5C:93:68:2C:E3:2B:00:F1:D6:11:0F:46:08:93:32:1D:FD:6E:60:CC

第二步:在APP内部通过代码的方式获取当前应用打包后的sha1 两者一比较即可。就可以知道当前的应用是否是用的这个keystore进行打包的 (MD5值同理比较,同样的代码不同的签名文件,会导致有不同的sha1  跟 MD5值,但是不同的包名不会导致此情况)

import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateEncodingException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
    //这个是获取SHA1的方法
    public static String getCertificateSHA1Fingerprint(Context context) {
        //获取包管理器
        PackageManager pm = context.getPackageManager();
        //获取当前要获取SHA1值的包名,也可以用其他的包名,但需要注意,
        //在用其他包名的前提是,此方法传递的参数Context应该是对应包的上下文。
        String packageName = context.getPackageName();
        //返回包括在包中的签名信息
        int flags = PackageManager.GET_SIGNATURES;
        PackageInfo packageInfo = null;
        try {
            //获得包的所有内容信息类
            packageInfo = pm.getPackageInfo(packageName,flags);
        } catch (PackageManager.NameNotFoundException e) {
            e.printstacktrace();
        }
        //签名信息
        Signature[] signatures = packageInfo.signatures;
        byte[] cert = signatures[0].toByteArray();
        //将签名转换为字节数组流
        InputStream input = new ByteArrayInputStream(cert);
        //证书工厂类,这个类实现了出厂合格证算法的功能
        CertificateFactory cf = null;
        try {
            cf = CertificateFactory.getInstance("X509");
        } catch (Exception e) {
            e.printstacktrace();
        }
        //X509证书,X.509是一种非常通用的证书格式
        X509Certificate c = null;
        try {
            c = (X509Certificate) cf.generateCertificate(input);
        } catch (Exception e) {
            e.printstacktrace();
        }
        String hexString = null;
        try {
            //加密算法的类,这里的参数可以使MD4,MD5等加密算法
            MessageDigest md = MessageDigest.getInstance("SHA1");
            //获得公钥
            byte[] publicKey = md.digest(c.getEncoded());
            //字节到十六进制的格式转换
            hexString = byte2HexFormatted(publicKey);
        } catch (NoSuchAlgorithmException e1) {
            e1.printstacktrace();
        } catch (CertificateEncodingException e) {
            e.printstacktrace();
        }
        return hexString;
    }
    //这里是将获取到得编码进行16进制转换
    private static String byte2HexFormatted(byte[] arr) {
        StringBuilder str = new StringBuilder(arr.length * 2);
        for (int i = 0; i < arr.length; i++) {
            String h = Integer.toHexString(arr[i]);
            int l = h.length();
            if (l == 1)
                h = "0" + h;
            if (l > 2)
                h = h.substring(l - 2,l);
            str.append(h.toupperCase());
            if (i < (arr.length - 1))
                str.append(':');
        }
        return str.toString();
    }

 

我们今天的关于有没有办法在 Groovy 中使用 JKS Keystore 或 Truststore 为 HTTP 调用实现 SSL?的分享已经告一段落,感谢您的关注,如果您想了解更多关于Android Eclipse keystore.jks文件生成,根据keystore密钥获取SHA1安全码 ,apk打包、Android Studio apk打包,keystore.jks文件生成,根据keystore密钥获取SHA1安全码、Android studio 签名文件.jks 转 .keystore、Android Studio 默认keystore 以及自定义keystore的相关信息,请在本站查询。

本文标签: