【发布时间】:2013-12-27 05:40:42
【问题描述】:
我正在尝试连接到 SSL 网络服务器。我们目前有一个 pkcs12 文件并连接,这是我们的私钥和证书。是否可以使用带有公钥和证书的 Java 代码进行连接。想象一下我有一个文件(它是数字的,但这里是 pem 输出)。
> Myfile.pk12 / Myfile.pem
>
> -----BEGIN CERTIFICATE----- ...
> -----END CERTIFICATE-----
>
> -----BEGIN ENCRYPTED PRIVATE KEY----- ...
> -----END ENCRYPTED PRIVATE KEY-----
我们可以用这个连接到服务器:
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.conn.ssl.X509HostnameVerifier;
import org.apache.http.impl.client.DefaultHttpClient;
KeyStore keyStore = generateKeyStore();
System.out.println("==>" + keyStore);
SSLSocketFactory socketFactory = new SSLSocketFactory(
SSLSocketFactory.TLS,
keyStore,
KEYSTORE_PASSCODE,
null,
null,
(X509HostnameVerifier) SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
...
这可行,但假设我们使用证书和公钥进行连接。 Java 不会在内部根据我们提供的密钥库创建一个私钥并允许我们连接吗?例如
> MyfileNEW.pk12 / MyfileNEW.pem
>
> -----BEGIN CERTIFICATE----- ...
> -----END CERTIFICATE-----
>
> -----BEGIN PUBLIC KEY----- ...
> -----END PUBLIC KEY-----
如果公钥嵌入在证书中?我可以在不预先创建私钥的情况下使用 Java 向服务器发送请求吗?
【问题讨论】: