

C#(VisualStudio 2017 Communuty .Net Frameworks 4.7.1)
にて、Webブラウザからアクセスする簡易Webサーバーのようなものを作成しています。  
ローカルなシステムでしたのでセキュリティは考えていなかったのですが、TLSの使用を検討する必要が出てきたため、まずはブラウザと単純なやりとりができるものから勉強しようということになりました。

そこでMSDNのサンプル

<https://docs.microsoft.com/ja-
jp/dotnet/api/system.net.security.sslstream?view=net-5.0>

を参考にして作ってみたのですが、ブラウザ（Edge,Chrome,Firefox)から  
"https://xxx.xxx.xxx.xxx:8080" （xxxはPCのIPアドレス）  
にアクセスすると、sslStream.AuthenticateAsServer 関数で  
例外エラー AuthenticationException が発生してしまいます。  
内容は "SSPI への呼び出しに失敗しました。内部例外を参照してください。" で、  
内部例外は "ローカル セキュリティ機関にアクセスできません" となっています。  
ポート番号8080は443 等に変更してみても同じでした。

証明証はopensslを使って作成しましたオレオレ証明証で、Common
Nameは適当な名前、アクセスするIPアドレスなどいくつか試してみましたが状態は変わりませんでした。

どんな情報でも構いません。  
どなたかお知恵をお借りできないでしょうか。

## 以下がソースの抜粋です

[code]

        static X509Certificate serverCertificate = null;
    
    
        private void button1_Click(object sender, EventArgs e)
        {
    
                string path = System.IO.Path.GetDirectoryName( Application.ExecutablePath);
                path += @"\server.pfx";
    
                X509Certificate.CreateFromCertFile(path);
                serverCertificate = new X509Certificate2(path, "password");
    
                TcpListener listner = new TcpListener(IPAddress.Any, 8080); 
                listner.Start();
    
                while (true)
                {
                        TcpClient client = listner.AcceptTcpClient();
                        ProcessClient(client);
                }
        }
    
        void ProcessClient(TcpClient client)
        {
                SslStream sslStream = new SslStream(client.GetStream(), false);
    
                try
                {
                        sslStream.AuthenticateAsServer(serverCertificate,false,SslProtocols.Tls12,true);
                        sslStream.ReadTimeout = 5000;
                        sslStream.WriteTimeout = 5000;
                        string messageData = ReadMessage(sslStream);
    
                        byte[] message = Encoding.UTF8.GetBytes("Hello from the server.<EOF>");
                        sslStream.Write(message);
                }
                catch(AuthenticationException ex)
                {
                        string errmsg = ex.Message;
                        if(ex.InnerException != null)
                        {
                                string errmsg2 = ex.InnerException.Message;
                        }
                        sslStream.Close();
                        client.Close();
                }
                finally
                {
                        sslStream.Close();
                        client.Close();
                }
        }
    
[/code]


CC BY-SA 4.0
2020-12-10T08:41:04.630
72566
2020-12-12T02:51:24.893
2020-12-10T08:52:08.343
3060
43097
question
c#
SslStream.AuthenticateAsServer関数で例外がスローされる


[『ローカルセキュリティ機関にアクセスできません』と表示される件](https://ymg.nagoya/cant-access-local-
security-authority/) は、参考になりませんか？


CC BY-SA 4.0
2020-12-12T02:51:24.893
72605
2020-12-12T02:51:24.893
217
72566
answer