【问题标题】:How to secure .Net Core application for trial with certificates如何使用证书保护 .Net Core 应用程序以进行试用
【发布时间】:2020-10-09 17:36:33
【问题描述】:

这个想法是在 .Net Core 应用程序中放置一个定时炸弹(它是 beta/试用版,不是完全可用的产品,从法律的角度来看是可以的)。

我想使用 X509 证书来实现这一点,但很难理解它是如何工作的以及需要做什么。

到目前为止,我使用 OpenSSL 创建了一个私钥(我们称之为 trial.key):

openssl genrsa -des3 -out trial.key 2048

,然后使用 -days 参数 (trial.pem) 和密码“password”创建证书:

openssl req -x509 -new -nodes -key trial.key -sha256 -days 4 -out trial.pem

然后结束 trial.cert:

openssl x509 -outform der -in trial.pem -out trial.crt

我将 trial.crt 添加到应用程序并在启动时检查日期:

private static void CheckTrialCert()
{
    var trialCert = new X509Certificate2(Path.Combine("Certificates", "trial.crt"), "password");

    if (trialCert.NotAfter < DateTime.Now)
    {
        Environment.Exit(0);
    };
}

问题是用户可以在磁盘上找到 trial.crt 并用自己创建的证书替换它,没有时间限制(假设他知道密码)并使用该应用程序。

这里可以做什么?有没有办法可以在应用程序中对私钥进行硬编码并检查 trial.crt 是否已使用我的私钥签名?

【问题讨论】:

    标签: asp.net-core ssl openssl x509certificate x509certificate2


    【解决方案1】:

    您可以尝试将证书直接嵌入代码中。但是,这不会阻止知识渊博的用户滥用您的限制。 .NET 应用程序可以轻松反编译,可以使用 ildasm.exe 等工具跟踪和修改逻辑。换句话说,您试图完成的是针对未受过教育的用户。

    要更难地进行反编译,您可以使用 .NET 混淆工具。但是它们有一些副作用,例如损坏的异常堆栈跟踪。考虑到可能的负面影响,您需要在安全性、可维护性和实施成本之间找到平衡点。

    但是,考虑到这一切,请记住,没有 100% 抵抗的解决方案,任何应用程序都可以被破解,问题是破解它的成本。

    【讨论】:

    • 代码会被混淆,所以我在这边很安全。
    猜你喜欢
    • 2017-02-27
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    相关资源
    最近更新 更多