Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在管理模式下打开visual studio时,HttpWebRequest使用证书失败_C#_Ssl_Httpwebrequest_.net 5 - Fatal编程技术网

C# 在管理模式下打开visual studio时,HttpWebRequest使用证书失败

C# 在管理模式下打开visual studio时,HttpWebRequest使用证书失败,c#,ssl,httpwebrequest,.net-5,C#,Ssl,Httpwebrequest,.net 5,我正在从事一个.NET5Web项目,需要使用一个已经构建的库(在.NETFramework中开发)。在库中,我们正在访问API端点,并且可以选择使用用户名/密码或证书身份验证。当我在没有管理员模式的情况下在visual studio中运行项目时,我使用提供的证书成功地进行了身份验证。但是,当我在管理员模式下打开visual studio时,我收到了400个错误请求。我想在管理模式下运行项目,因为我们想在docker容器上部署它,我想在创建映像之前调试应用程序 下面是创建证书的代码 public

我正在从事一个.NET5Web项目,需要使用一个已经构建的库(在.NETFramework中开发)。在库中,我们正在访问API端点,并且可以选择使用用户名/密码或证书身份验证。当我在没有管理员模式的情况下在visual studio中运行项目时,我使用提供的证书成功地进行了身份验证。但是,当我在管理员模式下打开visual studio时,我收到了400个错误请求。我想在管理模式下运行项目,因为我们想在docker容器上部署它,我想在创建映像之前调试应用程序

下面是创建证书的代码

public X509Certificate2Collection LoadPersonalCertificates(bool ForceLoadAll=false)
{
尝试
{
var certificatePath=Path.Combine(@“Path-to-cert.pem”);
var certificateContent=System.IO.File.ReadAllText(certificatePath);
var certificateCollection=new X509Certificate2Collection();
certificateCollection.Import(GetCertificateFromPEM(certificateContent,PEMSections.Certificate));
var rsaGenerator=RSA.Create();
rsaGenerator.ImportFromPem(cPEMPrivateKeyHeader+Convert.ToBase64String(getCertificateCompem(certificateContent,PEMSections.PrivateKey))+cPEMPrivateKeyFooter);
var cert=certificateCollection[0];
cert=cert.CopyWithPrivateKey(rsaGenerator);
cert=新的X509Certificate2(cert.Export(X509ContentType.Pfx,“Pfx密码”),“Pfx密码”);
证书收集。添加(证书);
certificateCollection.RemoveAt(0);
返回证书收集;
}
捕获(例外情况除外)
{
_logger.LogError(ex);
投掷;
}
}
解析.pem文件的代码

#地区认证帮助程序
私有字符串strPEMCertificateFileContent=“”;
私有常量字符串cPEMCertificateHeader=“----开始证书----------------”//这是证书头
私有常量字符串cPEMCertificateFooter=“----结束证书------”//这是证书页脚
private const string cPEMPrivateKeyHeader=“----开始RSA私钥----------------”//这是私有证书头
private const string cPEMPrivateKeyFooter=“----结束RSA私钥----------------”//这是专用证书页脚
/// 
///这将从PEM证书文件中提取证书,并返回字节以构造X509证书
/// 
///提供PEM文件内容
///提供要提取的部分,例如证书或CA证书
///返回提取的字节
公共字节[]GetCertificateFromPEM(字符串pemString,pemssections)
{
尝试
{
int intStartIndex=0;//将保存PEM Certificate头的开始索引
int intEndIndex=0;
//检查请求的PEM证书部分
道岔(区段)
{
case PEMSections.CA_Certificate://从PEM文件获取CA证书
{
//使用顺序排序选项获取证书头最后一次出现的从零开始的索引
intStartIndex=pemString.LastIndexOf(cPEMCertificateHeader,StringComparison.Ordinal);
如果(intStartIndex<0)
return null;//如果开始索引值小于零,则找不到它,因此返回null
intStartIndex+=cPEMCertificateHeader.Length;//将头长度添加到起始索引
//使用顺序排序选项获取证书页脚首次出现的从零开始的索引,并排除页眉和页脚之间获取字符串的页眉长度
intEndIndex=pemString.IndexOf(cPEMCertificateFooter、intStartIndex、StringComparison.Ordinal)-intStartIndex;
if(intEndIndex<0)
return null;//如果结束索引值小于零,则找不到它,因此返回null
//使用开始索引和结束索引将base64提取的字符串转换为字节并返回它们
打破
}
case.Certificate://从PEM文件获取证书
{
//使用顺序排序选项获取证书头首次出现的从零开始的索引
intStartIndex=pemString.IndexOf(cPEMCertificateHeader,StringComparison.Ordinal);
如果(intStartIndex<0)
return null;//如果开始索引值小于零,则找不到它,因此返回null
intStartIndex+=cPEMCertificateHeader.Length;//将头长度添加到起始索引
//使用顺序排序选项获取证书页脚首次出现的从零开始的索引,并排除页眉和页脚之间获取字符串的页眉长度
intEndIndex=pemString.IndexOf(cPEMCertificateFooter、intStartIndex、StringComparison.Ordinal)-intStartIndex;
if(intEndIndex<0)
return null;//如果结束索引值小于零,则找不到它,因此返回null
打破
}
case PEMSections.PrivateKey://从PEM文件获取PrivateKey
{
//使用顺序排序选项获取证书头首次出现的从零开始的索引
intStartIndex=pemString.IndexOf(cPEMPrivateKeyHeader,StringComparison.Ordinal);
如果(intStartIndex<0)
return null;//如果开始索引值小于零,则找不到它,因此返回null
intStartIndex+=cPEMPrivateKeyHeader.Length;//添加头le