如何用我从文本框中得到的号码更改证书的名称

Posted

技术标签:

【中文标题】如何用我从文本框中得到的号码更改证书的名称【英文标题】:How to changing the name of the certificate with the number I got from the textBox 【发布时间】:2022-01-18 13:49:20 【问题描述】:

我有一个 powershell 命令,我在其中生成一个证书和 我有一个 Web 应用程序,我在其中以字符串形式获取证书名称。

protected void ExecuteCode_Click(object sender, EventArgs e)
    
        string Test = ResultBox.Text;
        string script = (@"$certificate = New-SelfSignedCertificate `
                                            -Subject NewCertificate `
                                            -DnsName NewCertificate `
                                            -KeyAlgorithm RSA `
                                            -KeyLength 2048 `
                                            -NotBefore (Get-Date) `
                                            -NotAfter (Get-Date).AddYears(2) `
                                            -CertStoreLocation 'Cert:\CurrentUser\My' `
                                            -FriendlyName 'Localhost Certificate for .Net Core' `
                                            -HashAlgorithm SHA256 `
                                            -KeyUsage DigitalSignature, KeyEncipherment, DataEncipherment `
                                             -TextExtension @('2.5.29.37=text1.3.6.1.5.5.7.3.1')
                                        $certificatePath = 'Cert:\CurrentUser\My\' + ($certificate.ThumbPrint)
                                        
                                        $tmpPath = 'C:\sertifikalar'
                                        If(!(test-path $tmpPath))
                                        
                                        New-Item -ItemType Directory -Force -Path $tmpPath
                                         

                                        $pfxPassword = ConvertTo-SecureString -String '1234' -Force -AsPlainText
                                        $pfxFilePath = 'c:\sertifikalar\''0''.pfx'
                                        $cerFilePath = 'c:\sertifikalar\''0''.cer' 
                                        
                                        Export-PfxCertificate -Cert $certificatePath -FilePath $pfxFilePath -Password $pfxPassword
                                        Export-Certificate -Cert $certificatePath -FilePath $cerFilePath
                                        
                                        Import-PfxCertificate -FilePath $pfxFilePath Cert:\LocalMachine\My -Password $pfxPassword -Exportable
                                        Import-Certificate -FilePath $cerFilePath -CertStoreLocation Cert:\CurrentUser\Root"+ Test);

字符串测试是 .pfx .cer 证书名称。但我不能在我的字符串中给出参数。请帮帮我。

【问题讨论】:

如果您尝试使用逐字格式字符串,则语法为$@"。但是您可以将适当的参数传递给脚本。另外,您可能应该首先使用-CertStoreLocation 指定正确的位置,我不明白您为什么需要导出和重新导入 我按照你的说法尝试了 ($@) 但我收到 INVOKE 错误。你能把它改正后发给我吗? 嗯,它可能应该是$pfxFilePath = 'c:\sertifikalar\0.pfx' 但正如我所说,我不清楚你为什么要这样做,为什么你需要移动证书(而不仅仅是使用-CertStoreLocation) ?如果你确实需要移动它,你可以使用Move-Item。而如果你真的需要导出和导入,你不需要同时导出crtpkx,你可以只导出pkx 【参考方案1】:

你的主要问题是你实际上并没有使用格式字符串,因为你在里面有$

脚本本身也有一些语法错误,文件名周围有额外的引号。

但是您根本不需要使用它。可以执行New-SelfSignedCertificate,传入正确的参数,也可以加上CertStoreLocation指定存放位置

我必须说,NewCertificate 是一个奇怪的 DNS 和主题名称,并且只有在客户端通过该主机名连接时才有效。你可能想要Environment.MachineName

protected void ExecuteCode_Click(object sender, EventArgs e)

    string Test = ResultBox.Text;
    var shell = PowerShell.Create("New-SelfSignedCertificate")
        .AddParameter("Subject", "NewCertificate")
        .AddParameter("DnsName", new[]"NewCertificate")
        .AddParameter("KeyAlgorithm", "RSA")
        .AddParameter("KeyLength", 2048)
        .AddParameter("NotBefore", DateTime.Now)
        .AddParameter("NotAfter", DateTime.Now.AddYears(2))
        .AddParameter("CertStoreLocation", $"Cert:\CurrentUser\RootTest")
        .AddParameter("FriendlyName", "Localhost Certificate for .Net Core")
        .AddParameter("HashAlgorithm", "SHA256")
        .AddParameter("KeyUsage", new[]"DigitalSignature", "KeyEncipherment", "DataEncipherment")
        .AddParameter("TextExtension", new[]$"2.5.29.37=text1.3.6.1.5.5.7.3.1");
    shell.Invoke();

【讨论】:

非常感谢您的回答。但我有一个 Web 服务,该服务使用一个名称并使用该名称创建 pfx 文件。此脚本在 C 文件夹下创建一个新文件并将其(myName.pfx)移动到其中。我的 powershell 命令有效。你能按照我想要的方式编写函数吗? 正如我多次问你的那样,你需要解释为什么要导出和重新导入:它的目的是什么?您没有使用该文件,您只是重新导入它。请清楚发生了什么 我正在使用生成的 pfx 文件执行 pdf 签名,我必须为每个客户执行这些操作。我想对每个客户的 pdf 文件执行这个操作。而且我需要将我签署的证书文件保留在本地计算机上。

以上是关于如何用我从文本框中得到的号码更改证书的名称的主要内容,如果未能解决你的问题,请参考以下文章

html如何用checkbox 控制文本框中的内容.

在前台页面中如何用正则表达式判断文本框中

如何用JS判断两个文本框输入的数据不一致,并弹出对话框

如何用js把文本框清空?

如何用JavaScript,在输入框中输入颜色,改变相对应文字的颜色?

部分更改文本框中文本的颜色