summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2016-01-25 17:42:29 -0500
committerAndrew Cady <d@jerkface.net>2016-01-25 17:42:29 -0500
commit3fc632688205e46295803460b5e652751c803d59 (patch)
tree2ebe6903854018cb1d0c640b84807529fb6b6fa8 /src
parentcf440860e186e7fd775ae27da08220d9fe5e233e (diff)
move genReq into the library
Diffstat (limited to 'src')
-rw-r--r--src/Network/ACME.hs20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/Network/ACME.hs b/src/Network/ACME.hs
index 5a66028..f6bffe2 100644
--- a/src/Network/ACME.hs
+++ b/src/Network/ACME.hs
@@ -31,14 +31,32 @@ import Network.Wreq (Response, checkStatus, defaults,
31 statusMessage) 31 statusMessage)
32import qualified Network.Wreq as W 32import qualified Network.Wreq as W
33import qualified Network.Wreq.Session as WS 33import qualified Network.Wreq.Session as WS
34import OpenSSL.RSA
35import System.Directory 34import System.Directory
36import Text.Email.Validate 35import Text.Email.Validate
37import Text.Domain.Validate hiding (validate) 36import Text.Domain.Validate hiding (validate)
38import Network.URI 37import Network.URI
38import OpenSSL
39import OpenSSL.EVP.Digest
40import OpenSSL.RSA
41import OpenSSL.X509.Request
42import Data.List
39 43
40type HttpProvisioner = URI -> ByteString -> IO () 44type HttpProvisioner = URI -> ByteString -> IO ()
41 45
46genReq :: Keys -> [DomainName] -> IO CSR
47genReq _ [] = error "genReq called with zero domains"
48genReq (Keys priv pub) domains@(domain:_) = withOpenSSL $ do
49 Just dig <- getDigestByName "SHA256"
50 req <- newX509Req
51 setSubjectName req [("CN", domainToString domain)]
52 setVersion req 0
53 setPublicKey req pub
54 void $ addExtensions req [(nidSubjectAltName, intercalate ", " (map (("DNS:" ++) . domainToString) domains))]
55 signX509Req req priv (Just dig)
56 CSR domains . toStrict <$> writeX509ReqDER req
57 where
58 nidSubjectAltName = 85
59
42fileProvisioner :: WritableDir -> HttpProvisioner 60fileProvisioner :: WritableDir -> HttpProvisioner
43fileProvisioner challengeDir = BC.writeFile . uToF 61fileProvisioner challengeDir = BC.writeFile . uToF
44 where 62 where