summaryrefslogtreecommitdiff
path: root/acme-certify.hs
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 /acme-certify.hs
parentcf440860e186e7fd775ae27da08220d9fe5e233e (diff)
move genReq into the library
Diffstat (limited to 'acme-certify.hs')
-rw-r--r--acme-certify.hs20
1 files changed, 2 insertions, 18 deletions
diff --git a/acme-certify.hs b/acme-certify.hs
index cda3d09..360579b 100644
--- a/acme-certify.hs
+++ b/acme-certify.hs
@@ -13,14 +13,12 @@ module Main where
13 13
14import BasePrelude 14import BasePrelude
15import qualified Data.ByteString.Lazy.Char8 as LC 15import qualified Data.ByteString.Lazy.Char8 as LC
16import Network.ACME (CSR (..), canProvision, certify, fileProvisioner, ensureWritableDir, (</>), domainToString) 16import Network.ACME (canProvision, certify, fileProvisioner, ensureWritableDir, (</>), genReq)
17import Network.ACME.Encoding (Keys (..), readKeys, toStrict) 17import Network.ACME.Encoding (Keys (..), readKeys)
18import Network.URI 18import Network.URI
19import OpenSSL 19import OpenSSL
20import OpenSSL.EVP.Digest
21import OpenSSL.PEM 20import OpenSSL.PEM
22import OpenSSL.RSA 21import OpenSSL.RSA
23import OpenSSL.X509.Request
24import Options.Applicative hiding (header) 22import Options.Applicative hiding (header)
25import qualified Options.Applicative as Opt 23import qualified Options.Applicative as Opt
26import System.Directory 24import System.Directory
@@ -95,20 +93,6 @@ genKey privKeyFile = withOpenSSL $ do
95 writeFile privKeyFile pem 93 writeFile privKeyFile pem
96 return pem 94 return pem
97 95
98genReq :: Keys -> [DomainName] -> IO CSR
99genReq _ [] = error "genReq called with zero domains"
100genReq (Keys priv pub) domains@(domain:_) = withOpenSSL $ do
101 Just dig <- getDigestByName "SHA256"
102 req <- newX509Req
103 setSubjectName req [("CN", domainToString domain)]
104 setVersion req 0
105 setPublicKey req pub
106 void $ addExtensions req [(nidSubjectAltName, intercalate ", " (map (("DNS:" ++) . domainToString) domains))]
107 signX509Req req priv (Just dig)
108 CSR domains . toStrict <$> writeX509ReqDER req
109 where
110 nidSubjectAltName = 85
111
112getOrCreateKeys :: FilePath -> IO (Maybe Keys) 96getOrCreateKeys :: FilePath -> IO (Maybe Keys)
113getOrCreateKeys file = do 97getOrCreateKeys file = do
114 exists <- doesFileExist file 98 exists <- doesFileExist file