Haskell 如何使用HsOpenSSL获取X509证书的SHA-1摘要?

Haskell 如何使用HsOpenSSL获取X509证书的SHA-1摘要?,haskell,openssl,Haskell,Openssl,我正在编写一个web服务器,它接受SSL连接并计算客户端证书的SHA-1哈希: import OpenSSL (withOpenSSL) import OpenSSL.Session as SSL import OpenSSL.X509 as X509 import OpenSSL.EVP.Digest as EVP sslStuff :: SSL.SSL -> IO String sslStuff ssl = withOpenSSL $ do x509 <- liftM

我正在编写一个web服务器,它接受SSL连接并计算客户端证书的SHA-1哈希:

import OpenSSL (withOpenSSL)
import OpenSSL.Session as SSL
import OpenSSL.X509 as X509
import OpenSSL.EVP.Digest as EVP

sslStuff :: SSL.SSL -> IO String
sslStuff ssl = withOpenSSL $ do
  x509   <- liftM fromJust $ SSL.getPeerCertificate ssl
  issuer <- X509.getIssuerName x509 False
  subj   <- X509.getSubjectName x509 False
  putStrLn $ "\tsubject: " ++show subj
  putStrLn $ "\tissuer: " ++show issuer
  dg <- liftM fromJust $ EVP.getDigestByName "SHA1"
  cert <- X509.printX509 x509
  putStrLn cert
  let s = EVP.digest dg cert
  putStrLn $ "After Digest: "++s
  return s
导入OpenSSL(使用OpenSSL)
将OpenSSL.Session作为SSL导入
将OpenSSL.X509导入为X509
将OpenSSL.EVP.Digest导入为EVP
sslStuff::SSL.SSL->IO字符串
sslStuff ssl=withOpenSSL$do

我不认识哈斯克尔。但是下面的代码可能会对您有所帮助

X509 * x509;
char sha1dig[SHA1_DIGEST_LENGTH];
/*Get X509 certificate in x509*/

//Call X509_check_purpose to set SHA1 hash.
X509_check_purpose (x509, -1, 0);

//Get the SHA1 hash into buffer. Use x509->sha1_hash
memcpy(sha1dig, x509->sha1_hash, SHA1_DIGEST_LENGTH);
我相信我的评论将帮助您将此程序转换为Haskell