gpt4 book ai didi

java - 如何使用 Java 访问需要 SafeNet eToken 证书的 URL

转载 作者:行者123 更新时间:2023-11-30 03:54:42 25 4
gpt4 key购买 nike

下午好,

我已经有一个 SafeNet 5100 eToken,其中包含有效证书,我可以用它来访问我公司需要它的 Web 应用程序。

当我尝试使用网络浏览器(如 Chrome)访问网络应用程序时,一切正常,没有任何问题。 SafeNet 中打开一个对话框,输入密码后就可以访问该网站了。

我现在想做的是通过 java 程序访问这个 Web 应用程序(我使用 IDE eclipse 对其进行编程),但找不到如何执行此操作。 SafeNet 是否有任何 API 可以执行此操作或有任何在线教程?

我正在看这个帖子how to use Microsoft Crypto API with USB Dongle following PKCS#11 ,但无法理解这是怎么回事CryptoAPI CSP作品。如有任何帮助,我们将不胜感激。

谢谢

最佳答案

多亏了这两个线程,我找到了如何做到这一点:

How to get KeyStore from usb token in Java
java keytool with opensc pkcs#11 provider only works with debug option enabled

还有这个网站:

Pdf Signing Using eToken in java

首先,如果网站有一个 java 默认不信任的证书,您必须创建一个 trustStore 并将其加载到 java 的系统属性中。您可以在此处查看如何操作:

Oracle - Generating a KeyStore and TrustStore (using keytool)

您必须找到用于智能卡/eToken 的 PKCS#11 库安装在您的计算机中的位置,在我的计算机中,它位于“C:\Windows\System32\eTPKCS11.dll”中。然后创建一个 .cfg 文件,如下所示:

name=SafeNet
library=C:\Windows\System32\eTPKCS11.dll
slot=4

您为其指定名称和 PKCS#11 库的路径。 Slot 是您的 eToken/SmartCard 连接的插槽(如果您不需要,则无需设置)。

现在我的代码如下所示:

System.setProperty("javax.net.ssl.trustStore", "cfgFiles/trustedHttpsCertificates.truestore");
System.setProperty("javax.net.ssl.trustStoreType", "jks");
System.setProperty("javax.net.ssl.trustStorePassword", "oiadad");

Provider newProvider = new SunPKCS11("cfgFiles/etpkcs11.cfg");
Security.addProvider(newProvider);

try {
KeyStore keyStore = KeyStore.getInstance("PKCS11");
keyStore.load(null, "".toCharArray());

KeyManagerFactory keyFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyFactory.init(keyStore,null);

SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
sslContext.init(keyFactory.getKeyManagers(), null, null);
sslSocketFactory = sslContext.getSocketFactory();

} catch (KeyStoreException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (UnrecoverableKeyException e1) {
e1.printStackTrace();
} catch (KeyManagementException e1) {
e1.printStackTrace();
}

我首先告诉 java 在哪里寻找我的 trustStore。然后,我将路径传递给 cfg 文件,用它创建一个提供程序,并告诉安全人员这个新提供程序存在。

此后,我初始化并加载 PKCS11 KeyStore,为其提供一个空白密码(如果需要,可以传递我的真实密码,但这样会出现 SafeNet 弹出窗口并询问我的密码)。

然后我实例化一个 KeyManagerFactory 和一个 SSLSocketFactory。这是使用 eToken 访问多重身份验证 https url 的最后一步。

现在访问 protected https 网站还需要一个技巧,您必须为 HttpsURLConnection 提供新的 SSLSocketFactory。你可以这样做:

try {
HttpsURLConnection conn = (HttpsURLConnection)new URL(<your-https-url-here>).openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setSSLSocketFactory(sslSocketFactory);

int responseCode = conn.getResponseCode();
System.out.println("RESPONSE: " + responseCode);

InputStream inputstream = conn.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);

String line = null;
String htmlResponse = "";

while ((line = bufferedreader.readLine()) != null) {
htmlResponse += line + "\n";
//System.out.println("html: " + line);
}
} catch (ProtocolException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

我希望这可以帮助任何遇到电子 token 或智能卡问题的人。

关于java - 如何使用 Java 访问需要 SafeNet eToken 证书的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23525241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com