我有一个自托管的WCF服务器作为本地系统帐户下的Windows服务运行.我正在尝试以编程方式在c#中创建自签名证书,以便使用消息级别安全性与net.tcp端点一起使用.
我使用以下代码,它非常基于如何使用C#创建自签名证书中的接受答案?试图解决我的问题的一些小变化.
public static X509Certificate2 CreateSelfSignedCertificate(string subjectName, TimeSpan expirationLength)
{
// create DN for subject and issuer
var dn = new CX500DistinguishedName();
dn.Encode("CN=" + subjectName, X500NameFlags.XCN_CERT_NAME_STR_NONE);
CX509PrivateKey privateKey = new CX509PrivateKey();
privateKey.ProviderName = "Microsoft Strong Cryptographic Provider";
privateKey.Length = 1024;
privateKey.KeySpec = X509KeySpec.XCN_AT_KEYEXCHANGE;
privateKey.KeyUsage = X509PrivateKeyUsageFlags.XCN_NCRYPT_ALLOW_DECRYPT_FLAG | X509PrivateKeyUsageFlags.XCN_NCRYPT_ALLOW_KEY_AGREEMENT_FLAG;
privateKey.MachineContext = true;
privateKey.ExportPolicy = X509PrivateKeyExportFlags.XCN_NCRYPT_ALLOW_EXPORT_FLAG;
privateKey.Create();
// Use the stronger SHA512 hashing algorithm
var hashobj = new CObjectId();
hashobj.InitializeFromAlgorithmName(ObjectIdGroupId.XCN_CRYPT_HASH_ALG_OID_GROUP_ID,
ObjectIdPublicKeyFlags.XCN_CRYPT_OID_INFO_PUBKEY_ANY,
AlgorithmFlags.AlgorithmFlagsNone, "SHA1");
// Create the self signing …Run Code Online (Sandbox Code Playgroud) 使用SslStream和socket,我从头开始开发了一个https Web服务器.我可以将证书应用于来自C#代码的流并处理请求.
但是,我并没有弄清楚如何用Owin做到这一点.有没有人知道如何将证书绑定到自托管控制台应用程序?
例:
// Bind the below certificate to Owin host
var certificate = new X509Certificate2("server.pfx", "password");
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅下面的现有Owin主机代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Owin.Hosting;
using AppFunc = System.Func<System.Collections.Generic.IDictionary<string, object>, System.Threading.Tasks.Task>;
namespace Owin.Startup
{
class Program
{
static void Main(string[] args)
{
int port = 8888;
string url = $"http://localhost:{port}";
using (WebApp.Start<Startup>(url))
{
Console.WriteLine($"Hosted: {url}");
Console.ReadLine();
}
}
}
public class Startup
{
private IAppBuilder app;
public void Configuration(IAppBuilder app)
{
#if DEBUG
app.UseErrorPage(); …Run Code Online (Sandbox Code Playgroud) 我找到了很多答案如何将httplistener设置为使用HTTPS,但每个解决方案都需要使用命令行.我想这是最快的方法,但我想编写C#类来处理这个问题.
在旧的解决方案中,我使用了webserver类(在Internet的某个地方找到,我不记得确切的名称),它允许以这种方式添加证书:
webserver.Certificate = new X509Certificate2("MyCert.pfx", "MyPassword");
Run Code Online (Sandbox Code Playgroud)
有没有办法用httplistener实现这个?从代码显然.
问候.
c# ×3
certificate ×2
.net ×1
httplistener ×1
https ×1
owin ×1
self-hosting ×1
self-signed ×1
ssl ×1
wcf-security ×1