我正在使用HttpWebRequest对象通过HTTP POST访问Web服务。部分要求是我:
HttpWebRequest是否自动为我处理?我假设如果出现这些情况中的任何一个,我将得到标准的“无法为SSL / TLS安全通道建立信任关系”异常。
我使用MSDN sslstream文章创建了TCP客户端/服务器应用程序.客户端和服务器都正常工作.我还将ssl证书附加到客户端和服务器.
当我运行客户端和服务器程序时,服务器始终定义"RemoteCertificate = null".我想读取客户端证书并将该证书复制/存储到存储.
我还有使用X509Store Class 存储证书的演示程序.现在唯一的问题是获得客户端证书.
这是服务器的代码:
using System;
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.Net.Security;
using System.Security.Authentication;
using System.Text;
using System.Security.Cryptography.X509Certificates;
using System.IO;
namespace Examples.System.Net
{
public sealed class SslTcpServer
{
static X509Certificate serverCertificate = null;
public static void RunServer(string certificate)
{
serverCertificate = X509Certificate.CreateFromCertFile(certificate);
TcpListener listener = new TcpListener(IPAddress.Any, 8080);
listener.Start();
while (true)
{
Console.WriteLine("Waiting for a client to connect...");
TcpClient client = listener.AcceptTcpClient();
ProcessClient(client);
}
}
static void ProcessClient(TcpClient client)
{ …Run Code Online (Sandbox Code Playgroud) 我需要通过java以编程方式获取安全网站的公钥.我看了这个,这个,这个和这个和其他的方面.但我还没有找到通过java获得它的解决方案.
编辑:::
根据Zielu的回答,我写了以下程序:
import java.security.PublicKey;
import java.security.cert.Certificate;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
public class RetrievePublicKey {
private static PublicKey getKey(String hostname, int port) throws Exception {
SSLSocketFactory factory = HttpsURLConnection.getDefaultSSLSocketFactory();
SSLSocket socket = (SSLSocket) factory.createSocket(hostname, port);
socket.startHandshake();
Certificate[] certs = socket.getSession().getPeerCertificates();
Certificate cert = certs[0];
PublicKey key = cert.getPublicKey();
System.out.println(key);
return key;
}
public static void main(String[] args) throws Exception {
System.out.println(getKey("bctcl-parasuram.bctchn.local", 8443));
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,我得到以下异常:
Exception in thread "main" javax.net.ssl.SSLHandshakeException: …Run Code Online (Sandbox Code Playgroud)