JAVA中如何调用API函数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中如何调用API函数?相关的知识,希望对你有一定的参考价值。

如题描述~!

参考技术A JAVA不能直接调用Windows底层API,除非使用JNI技术。需要C语言配合 参考技术B 调用API函数 ?
打开某个类的API你可以看到类的详细介绍和类方法和类实例化后的方法(函数)
你在写程序的时候 可以在实例化某个类后 用对象调用这些函数
比如:
String s = new String("sdfsdf");
s.toString();

如何在 JAVA 中使用证书调用服务器 API

【中文标题】如何在 JAVA 中使用证书调用服务器 API【英文标题】:How to Call Server API using certificate in JAVA 【发布时间】:2021-06-08 15:56:17 【问题描述】:

我必须使用证书调用服务器 API,所以我已将 cer 文件导入密钥库并完成编码,但仍然出现错误 javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

用于将 cer 文件导入密钥库的命令。 keytool -importcert -file D:\KALAIVANI_ALL\kalaivani\NEW_EMANDATE_APGB\servertoservecert\onmagcert.cer -keystore D:\KALAIVANI_ALL\kalaivani\NEW_EMANDATE_APGB\servertoservecert\server_npcikeystore.jks -alias "cedge1"

    appPathCertificate="D:/KALAIVANI_ALL/kalaivani/NEW_EMANDATE_APGB/servertoservecert/server_npcikeystore.jks";
                 
                  System.out.println("appPathCertificate--->"+appPathCertificate);
                  char[] passphrase = "cedge1".toCharArray(); //password
                  KeyStore keystore = KeyStore.getInstance("JKS");
                  keystore.load(new FileInputStream(appPathCertificate), passphrase); //path
 TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
                  tmf.init(keystore);


                  SSLContext context = SSLContext.getInstance("TLS");
                  TrustManager[] trustManagers = tmf.getTrustManagers();
                  context.init(null, trustManagers, null);
                  SSLSocketFactory sf = context.getSocketFactory();
                  
             URL url = new URL(common_utility.getEmandateServerResponeURL());
            System.setProperty("javax.net.ssl.keyStore", appPathCertificate);
System.setProperty("javax.net.ssl.keyStorePassword", "cedge1");
System.setProperty("javax.net.ssl.keyStoreType", "JKS");   
                
                String proxyhost=common_utility.getProxyHost();
                String proxyport=common_utility.getProxyPort();
                Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyhost, new Integer(proxyport)));
                HttpsURLConnection  conn = (HttpsURLConnection ) url.openConnection(proxy);
                conn.setSSLSocketFactory(sf);
                
                conn.setDoInput(true);
                conn.setDoOutput(true);
                conn.setRequestMethod("POST");
                conn.setUseCaches (false);
                System.out.println("GETISSUE Request : "+str_jsonparams);
                OutputStream os = conn.getOutputStream();
                os.write(str_jsonparams.getBytes());
                os.flush();
                 System.out.println("Response code :"+conn.getResponseCode());

【问题讨论】:

任何人都可以帮忙 【参考方案1】:

您在SSL handshake 过程中遇到了验证来自服务器的响应的问题。您需要在trust store 中添加中间证书和根证书。这些证书将用于验证服务器身份。 例如,在建立连接时,您会收到stackexchange 服务器证书。然后为了验证身份,您必须在信任库中有R3 cert(中间CA)和DST Root CA X3(根CA)。

TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keystore);

context.init(null, trustManagers, null);

在您的情况下,当您使用 Keystore 初始化 TrustManagerFactory 时,您必须将 intermediatesroot 证书放入密钥库中。 JDK store cacerts 不会在这里使用。

【讨论】:

实际上我只从目标端获得了用于访问 URL 的 CER 文件,因为我转换为 jks 并通过 httpsurl 连接。我是否也必须从他们那里获得中间证书和根证书?如何在编码中也通过该证书。或者只需要添加 C:\Program Files\Java\jdk1.8.0_191\jre\lib\security\cacerts。这足够了。请建议 您需要来自目标方的根证书和中间证书。您可以采用任何一种方法。将其添加到 JDK 信任库的底层,您的应用程序正在使用该信任库或执行上述操作。在您的应用中创建自定义信任库,并使用包含证书的密钥库文件对其进行初始化。

以上是关于JAVA中如何调用API函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何测试调用api的函数?

delphi中的showmessage函数是调用的哪个API函数

如何执行带有承诺的函数并通过 API 调用多次检查其值并使用该值执行另一个函数?

在asp或者aspx网页中如何调用api函数?

WINCC中怎样通过C动作调用API函数?

如何集成 API Gateway 调用带参数的 Lambda 函数?