62,046
社区成员
发帖
与我相关
我的任务
分享
// 1 导入自己的证书
KeyStore selfCert = KeyStore.getInstance("pkcs12");
selfCert.load(new FileInputStream(SELFCERTPATH),
SELFCERTPWD.toCharArray());
X509Certificate2 myX509Certificate2 = new X509Certificate2(
@"D://cert//ca.jks", //证书路径
"Huawei@123", //证书的私钥保护密码
X509KeyStorageFlags.Exportable //表示此证书的私钥以后还可以导出
);
//密钥管理工厂 注册密钥
KeyManagerFactory kmf = KeyManagerFactory.getInstance("sunx509");
kmf.init(selfCert, SELFCERTPWD.toCharArray());
// 2导入服务器CA证书,
KeyStore caCert = KeyStore.getInstance("jks");
caCert.load(new FileInputStream(TRUSTCAPATH), TRUSTCAPWD.toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("sunx509");
tmf.init(caCert);
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
// 3 设置域名不验证
// ((非商业物联网平台,没有使用域名访问一般。)y.)
SSLSocketFactory ssf = new SSLSocketFactory(sc,
SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
//如果平台已经申请了与证书信息中的域名相匹配的域名,则证书
//域名检查可以启用(默认打开)
// SSLSocketFactory ssf = new SSLSocketFactory(sc);
ClientConnectionManager ccm = this.getConnectionManager();
SchemeRegistry sr = ccm.getSchemeRegistry();
sr.register(new Scheme("https", 8743, ssf));
httpClient = new DefaultHttpClient(ccm);
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
namespace WuHanHouse
{
public class HttpsRequest
{
private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
return true;
}
public static string PostHttpsRequest(string url, Dictionary<string, string> parameters)
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
var request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10;
request.CookieContainer = new CookieContainer();
request.AllowAutoRedirect = true;
request.Timeout = 1000 * 60;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.Referer = url;
if (!(parameters == null || parameters.Count == 0))
{
var param = "";
foreach (var key in parameters.Keys)
{
param += "&" + key + "=" + parameters[key];
}
using (var sw = new StreamWriter(request.GetRequestStream()))
{
sw.Write(param.Trim('&'));
sw.Close();
}
}
var res = request.GetResponse() as HttpWebResponse;
var st = res.GetResponseStream();
var sr = new StreamReader(st);
return sr.ReadToEnd();
}
}
}
2. 调用的例子
var parameters = new Dictionary<string, string>();
parameters.Add("PostType", "FOOD");
parameters.Add("Category", "");
parameters.Add("PageIndex", "1");
parameters.Add("PageSize", "8");
var res = HttpsRequest.PostHttpsRequest("https://www.myvivaplan.com/Blog/List", parameters);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
var sbString = new StringBuilder();
//导入自己的证书
var selfCert = new X509Certificate2(SelfCertPath, SelfCertPwd,
X509KeyStorageFlags.MachineKeySet);
//服务器证书
var trustCert = new X509Certificate2(TrustcaPath, TrustcaPwd,
X509KeyStorageFlags.MachineKeySet);
req.ClientCertificates.Add(selfCert);
//req.ClientCertificates.Add(trustCert);
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
req.Headers.Add("SOAPAction", url);
string message = "";
if (req != null)
{
if (!(dicParam == null) || dicParam.Count == 0)
{
int i = 0;
foreach (var key in dicParam.Keys)
{
if (i > 0)
{
sbString.AppendFormat("&{0}={1}", key, dicParam[key]);
}
else
{
sbString.AppendFormat("{0}={1}", key, dicParam[key]);
}
i++;
}
}
byte[] bs = Encoding.GetEncoding("utf-8").GetBytes(sbString.ToString());
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = bs.Length;
using (Stream reqstream = req.GetRequestStream())
{
reqstream.Write(bs, 0, bs.Length);
reqstream.Close();
}