メモ:
- アバターがログインすると,OSHttpServer.OSHttpListener.OnAccept() がトリガーされる.
- OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpListener.cs 内の関数.
- 途中で CreateSecureContext() を呼ぶ.
- CreateSecureContext()
- OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpContextFactory.cs 内の関数.
- この時,コールバック関数へのポインタが渡され,この関数内で実行される.
- 最後に CreateContext(true, remoteEndPoint, sslStream, socket) を呼ぶ.
- 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";
+ }
}
}