マネーサーバのクライアント(SIM)認証

Re: マネーサーバのクライアント(SIM)認証

- Iseki Fumikazu の投稿
返信数: 0

メモ:

  1. アバターがログインすると,OSHttpServer.OSHttpListener.OnAccept() がトリガーされる.
    • OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpListener.cs 内の関数.
    • 途中で CreateSecureContext() を呼ぶ.
  2. CreateSecureContext()
    • OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpContextFactory.cs 内の関数.
    • この時,コールバック関数へのポインタが渡され,この関数内で実行される.
    • 最後に CreateContext(true, remoteEndPoint, sslStream, socket) を呼ぶ.
  3. CreateContext(true, remoteEndPoint, sslStream, socket)
    • OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs 内の関数.
    • この中で,SSLCommonName = _cert2.GetNameInfo(X509NameType.SimpleName, false); が実行される.
      • 本来ならば,Comon Name が返ってくる筈.
      • mono のバージョンによって _cert2 の生成が上手く行かず,GetNameInfo() でエラーを起こす.
         

解決方法:対症療法だが マネーサーバ用にパッチを当てる.(クライアントのSIMでは不要)

diff -Nur OpenSim-/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs
--- OpenSim-/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs 2020-09-01 22:37:02.330024299 +0900
+++ OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs  2020-09-04 11:42:17.653235008 +0900
@@ -133,8 +133,12 @@
                 if (_cert1 != null)
                 {
                     X509Certificate2 _cert2 = new X509Certificate2(_cert1);
-                    if (_cert2 != null)
+                    if (_cert2.Verify()) {
                         SSLCommonName = _cert2.GetNameInfo(X509NameType.SimpleName, false);
+                    }
+                    else {
+                        SSLCommonName = "unknownName";
+                    }
                 }
             }