我正在编写一个实用程序,可以让我监控我们网站的健康状况.这包括一系列可以针对Web应用程序运行的验证任务.其中一项测试是预测特定SSL证书的到期.
我正在寻找一种方法来预先使用.NET或WINAPI获取安装在网站上的SSL证书,以便我可以验证与特定网站关联的证书的到期日期.
我可以这样做的一种方法是在ServicePointManager.ServerCertificateValidationCallback处理程序中验证证书时对证书进行缓存,然后将它们与配置的网站进行匹配,但这似乎有些过时了.另一种方法是使用网站证书配置应用程序,但我宁愿避免这种情况,以便最大限度地减少配置.
对于我来说,使用.NET下载与网站关联的SSL证书最简单的方法是什么,以便我可以检查证书包含的信息来验证它?
编辑:
要扩展下面的答案,不需要在创建请求之前手动创建ServicePoint.它作为执行请求的一部分在请求对象上生成.
private static string GetSSLExpiration(string url)
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
using (WebResponse response = request.GetResponse()) { }
if (request.ServicePoint.Certificate != null)
{
return request.ServicePoint.Certificate.GetExpirationDateString();
}
else
{
return string.Empty;
}
}
Run Code Online (Sandbox Code Playgroud) 所以我有一个免费注册的VB6 DLL,由我的.NET 3.5程序集库引用,最终由.NET 3.5 WinForms应用程序引用(不确定它是否相关,但包含在绘制图片中).
我收到错误'问题隔离COM引用'SomeVBDll': Registry key 'HKEY_CURRENT_USER\SOFTWARE\CLASSES\CLSID\{dd1d7f58-1d6b-4370-a1b9-05c03816a128}\InProcServer32' is missing value '(Default)'
我最初的尝试是检查这个值是否确实存在,然后将其放置到位.这导致编译时出现相同的上述消息.
有没有人遇到过这个问题并且知道它的任何解决方案?
提前致谢.下面是直接引用VB6 dll的程序集中的清单.
<assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity name="Native.App.Core" version="1.0.0.0" type="win32" />
<file name="SomeVBDll.dll" asmv2:size="184320">
<hash xmlns="urn:schemas-microsoft-com:asm.v2">
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<dsig:DigestValue>BWWHQTqNGUupT8xznLoN3jn7S9Y=</dsig:DigestValue>
</hash>
<typelib tlbid="{755c1df5-d0c5-4e10-a93d-54bf186e8daf}" version="1.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" />
<comClass clsid="{dd1d7f58-1d6b-4370-a1b9-05c03816a128}" threadingModel="Apartment" tlbid="{755c1df5-d0c5-4e10-a93d-54bf186e8daf}" progid="SomeVBDll.MyClass" />
</file>
</assembly>
Run Code Online (Sandbox Code Playgroud)
编辑///
将VB6 DLL中的所有类标记为MultiUse似乎已经解决了这个问题. 虽然这解决了我遇到的问题并且仍然允许我使用无reg的COM,有没有人知道一种方法来解决必须设置所有COM类Instancing到MultiUse?
我从这开始,但它是执行任务的最佳方式吗?
select
reverse(
substring(reverse(some_field),
charindex('-', reverse(some_field)) + 1,
len(some_field) - charindex('-', reverse(some_field))))
from SomeTable
Run Code Online (Sandbox Code Playgroud)
reverse(some_field)?charindex
' - '并存储它的最后一个索引,是否有更有效的方法在T-SQL中执行此任务?请注意,我的工作,我真的很想知道它是否是最好的方式.
以下是some_field的一些示例值.
s2-st, s1-st, s3-st, s3-sss-zzz, s4-sss-zzzz
Run Code Online (Sandbox Code Playgroud)
编辑:
此示例输出将是......
s1, s2, s3-sss, s3, s4-sss
Run Code Online (Sandbox Code Playgroud)
ErikE编写的解决方案实际上是在字符串的结尾处,所以在最后一个连字符之后的所有内容.我只是修改了他的版本以获得它之前的所有内容,而不是使用与该left函数类似的方法.感谢您的所有帮助.
select left(some_field, abs(charindex('-', reverse(some_field)) - len(some_field)))
from (select 's2-st' as some_field
union select 's1-st'
union select 's3-st'
union select 's3-sss-zzz'
union select 's4-sss-zzzz') as SomeTable
Run Code Online (Sandbox Code Playgroud) 我一直在使用RoslynCodeEditor控件并试图找到一种方法将我的全局对象传递给RoslynCodeEditor并在我的脚本中有intellisense.
有没有人知道在使用RoslynCodeEditor控件编辑脚本时如何授予对上下文对象属性或方法的访问权限?
MyContext context = new MyContext();
context.Data = data;
ScriptOptions scriptOptions = ScriptOptions.Default;
scriptOptions = scriptOptions.WithReferences(ReferencesAndImports.References);
scriptOptions = scriptOptions.WithImports(ReferencesAndImports.Imports);
var scriptState = await CSharpScript.EvaluateAsync<string>("int i = 0;", scriptOptions, context, typeof(MyContext));
Run Code Online (Sandbox Code Playgroud)