通过PowerShell创建PEM文件

2024-02-08

我正在尝试编写一个脚本来在 powershell 中创建 PEM 证书文件。我不确定我所做的是否完全错误,但是当我尝试在 socat OPENSSL 中使用 PEM 文件时,它返回了错误:

$ socat OPENSSL-LISTEN:1337,cert=cert.pem,verify=0 -

socat[1209] E SSL_CTX_use_certificate_file(): error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag
#create certificate
$cert = New-SelfSignedCertificate `
    -Subject "MYHOSTNAME" `
    -TextExtension @("2.5.29.17={text}DNS=MYHOSTNAME&IPAddress=192.168.1.100") `
    -KeySpec Signature `
    -HashAlgorithm SHA256 `
    -KeyExportPolicy Exportable

#publicKey
$PublicKey = $cert.GetPublicKey();
$PublicKeyB64 = [Convert]::ToBase64String($PublicKey,"InsertLineBreaks");

#privateKey
$RSACng  = [System.Security.Cryptography.X509Certificates.RSACertificateExtensions]::GetRSAPrivateKey($cert);
$PrivateKey = $RSACng.Key;
$PrivateKeyByte = $PrivateKey.Export("PRIVATEBLOB");
$PrivateKeyB64 = [Convert]::ToBase64String($PrivateKeyByte,"InsertLineBreaks");

#createFile
$out = New-Object string[] -ArgumentList 6;
$out[0] = "-----BEGIN PRIVATE KEY-----";
$out[1] = $PrivateKeyB64;
$out[2] = "-----END PRIVATE KEY-----"

$out[3] = "-----BEGIN CERTIFICATE-----"
$out[4] = $publicKeyB64;
$out[5] = "-----END CERTIFICATE-----"

[IO.File]::WriteAllLines("C:\Users\Public\cert.pem",$out)

我不确定我所做的是否完全错误,但我找不到任何资源来帮助我继续。

一些执行在 powershell 中创建 PEM 文件的类似操作的脚本或一些有关如何继续操作的提示可能有助于帮助我解决此问题。


正如所评论的,您放入两个 PEM 文件正文中的数据是错误的。

对于证书,很简单,只需使用$cert.RawData(转换为带有换行符的 base64,就像您已经拥有的那样)。

对于私钥,根据文档RSA摘要返回者GetRSAPrivateKey($cert) (not .Key)因此它的实现就像RSACng有方法ExportPkcs8PrivateKey() https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.asymmetricalgorithm.exportpkcs8privatekey?view=net-5.0#System_Security_Cryptography_AsymmetricAlgorithm_ExportPkcs8PrivateKey这应该是放入 PEM 类型文件中的正确数据BEGIN/END PRIVATE KEY并且ExportRSAPrivateKey() https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.rsa.exportrsaprivatekey?view=net-5.0#System_Security_Cryptography_RSA_ExportRSAPrivateKey这应该是对于 PEM 文件类型正确的旧格式BEGIN/END RSA PRIVATE KEY-- 但仅限于 Core 3.0+ 和 Core 5,我没有,因此无法测试。

如果您有解决方法openssl命令行是Export-PfxCertificate到一个文件,其中openssl pkcs12 [-nodes]然后可以转换为 PEM 格式 OpenSSL(因此socat) 喜欢。但如果你有openssl通过命令行,您可以轻松地使用它直接生成私钥和(自签名/虚拟)证书,而无需使用 powershell。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过PowerShell创建PEM文件 的相关文章

随机推荐

  • GitHub API - 如何确定文件是否实际上是符号链接?

    通过 GitHub API 查询符号链接时 如果符号链接指向文件而不是目录 我会得到不同的结果 后者表现得更好 因为它会返回 type symlink 作为其 JSON 的一部分 而前者返回 type file 例子文件符号链接 https
  • 动态插入 3 个图像到水平滚动视图或 Viewpager

    下面显示了我正在寻找的图像 目前我正在使用视图寻呼机和圆圈指示器 在视图页面中 它仅显示单个图像 我想要在一个viewpager中显示三张图像 如图所示 当我滑动该页面时 再次从服务器加载三个不同的图像 并在下面显示文本 这个怎么做 对此有
  • 使用已知和未知字段反序列化 json

    给出以下 json 结果 默认的 json 结果有一组已知的字段 id 7908 name product name 但可以使用其他字段进行扩展 在本例中 unknown field name 1 and unknown field nam
  • jQuery - 选择具有特定样式的子项

    我不知道如何在以下示例中选择第一个跨度 div class sp span abc span span xyz span div 我尝试过使用这个 但没有成功 div sp span visibility hidden not work t
  • 使用 XCode 4.5 运行 iOS 5.1 模拟器时出现问题

    我最近将 XCode 升级到了 4 5 版本 现在当我尝试开发 iOS 5 0 5 1 的应用程序时遇到了问题 我开发了一个简单的 iPad 游戏 用户需要将图像与相应的单词进行匹配 所有这些项目都存储在 UIImageView 中 如果相
  • 适用于 iOS 8 和 iOS 9 的自定义 Unwind Segue

    我的问题是 如何让以下自定义展开转场在 iOS 9 之前版本的设备以及运行 iOS 9 的设备上工作 我有一个显示视图控制器的自定义 Segue 然后有一个相应的自定义展开 Segue 这段代码在 iOS 8 中运行良好 是通过创建 UIS
  • 将 jzy3d.canvas 转换为 awt.component

    我需要将 jzy3d 画布转换为 java awt component 我想使用 JCombobox 和按钮在框架中显示图表 但是当我想将画布转换为组件时 程序被删除 谢谢您的回答 我已经尝试过this https stackoverflo
  • Spring 5 WebFlux 中的缓存

    有没有办法在 Spring 5 中缓存来自 WebClient 的 Flux 我尝试过这个 但没有缓存任何东西 RestController SpringBootApplication EnableCaching public class
  • 如何标记相同的熊猫数据框行?

    我有一个像这样的大熊猫数据框 log apple watermelon orange lemon grapes 1 1 1 yes 0 0 1 2 0 1 0 0 1 True 0 0 0 2 2 0 0 0 0 2 2 1 1 yes 0
  • gcc 对 alloca 的处理是怎么回事?

    在大多数平台上 alloca只是归结为堆栈指针的内联调整 例如 从rsp在 x64 上 加上一些维护堆栈对齐的逻辑 I was looking at the code that gcc generates for alloca and it
  • paypal.HostedFields.isEligible() 始终返回 False :Paypal 借记卡/信用卡付款

    我想在我的网站上添加由 PayPal 提供支持的借记卡 信用卡付款 我正在按照指南进行操作 https developer paypal com docs business checkout advanced card payments h
  • Gdb - 打印数组或数组元素,具有各种大小的元素

    汇编代码 yasm section data src db 1 2 3 的每个元素src数组是1个字节 In GDB 如何打印整个数组或指定索引处的元素 例如打印值为 2 的元素 好的 在 Michael Petch 的许可下 我想自己给出
  • 如何在同一张图片中定位多个物体?

    我是 TensorFlow 的新手 目前 我正在TensorFlow网站上测试一些分类示例 卷积神经网络 它解释了如何将输入图像分类到预定义的类中 但问题是 我不知道如何在相同的图像 例如 我有一个带有猫和狗的输入图像 我希望我的图形在输出
  • 如何找到与输入元素最接近且处于同一级别的标签

    我动态添加input我的表单中的元素 每个逻辑代码块如下所示
  • RuntimeError:切勿在任务 Celery 中调用 result.get()

    我正在使用 celery 将任务发送到远程服务器并尝试返回结果 任务状态不断更新更新状态 http docs celeryproject org en latest reference celery app task html celery
  • 自定义静音/取消静音按钮 Youtube API

    Preface 我想说我已经尽力避免使这个问题成为重复的问题 即自己搜索谷歌 阅读很多其他类似的问题等 我发现了很多真正有用的东西 这些东西使我遇到了这种特定情况我有代码可以展示 所以希望我的最后一个问题能够清晰且可以回答 我有一个使用纯
  • 为什么Sequelize迁移创建表但模型无法连接到数据库

    我正在学习如何在 Nodejs 中使用 Sequelize ORM 并将数据保存在 Postgres 数据库中 我的目标是将用户数据插入Users桌子 我已经使用迁移创建了该表 并且它有效 但是 我无法保存用户数据 例如 我关注了很多资源T
  • Android 后退按钮和进度对话框

    我有一个异步任务在工作时显示进度对话框 它调用在UiThread上运行从内部后台操作显示进度对话框 在运行时我想允许使用后退按钮取消操作 其他人遇到过这个问题 当 ProgressDialog 正在运行时 后退按钮不起作用 https st
  • 授权失败时将用户重定向到特定视图?

    我有以下代码 AcceptVerbs HttpVerbs Post Authorize Roles RoleKeys Administrators public ActionResult Edit int id FormCollection
  • 通过PowerShell创建PEM文件

    我正在尝试编写一个脚本来在 powershell 中创建 PEM 证书文件 我不确定我所做的是否完全错误 但是当我尝试在 socat OPENSSL 中使用 PEM 文件时 它返回了错误 socat OPENSSL LISTEN 1337