如何验证pem证书和签名(RSA-SHA1)?

问题描述 投票:0回答:1

我想在Node.js中检查签名是否有效,我会使用

https://nodejs.org/api/crypto.html#crypto_verify_verify_object_signature_signatureencoding

我似乎找不到任何提供此功能的水晶?

crystal-lang
1个回答
2
投票

目前尚未在标准库中实现,但我们可以找到一个执行它的分片:openssl_ext。这个碎片非常类似于Ruby API,所以让我们开始吧!

首先我们需要一把钥匙:

$ openssl genpkey -algorithm rsa -out key.pem
$ openssl rsa -in key.pem -pubout -out pub.pem

然后我们需要创建一个分片并添加依赖项:

$ shards init
$ $EDITOR shards.yml
dependencies:
   openssl_ext:
      github: randomstate/openssl_ext
$ shards

签署一个小程序:

$ $EDITOR sign.cr
require "openssl_ext"
require "base64"

private_key = OpenSSL::RSA.new File.read(ARGV[0])
digest = OpenSSL::Digest.new("SHA1")

data = ARGV[1]
signature = private_key.sign digest, data

puts Base64.encode signature
$ crystal build sign.cr

还有一个验证签名的小程序:

$ $EDITOR verify.cr
require "openssl_ext"
require "base64"

public_key = OpenSSL::RSA.new File.read(ARGV[0]), is_private: false
digest = OpenSSL::Digest.new("SHA1")

data = ARGV[1]
signature = Base64.decode STDIN.gets_to_end

puts public_key.verify(digest, signature, data) ? "Valid" : "Invalid"
$ crystal build verify.cr

让我们测试一下我们的工作:

$ ./sign key.pem Hello | ./verify pub.pem Hello
Valid
$ ./sign key.pem Hello | ./verify pub.pem Bye
Invalid
© www.soinside.com 2019 - 2024. All rights reserved.