|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [MirageOS-devel] csrs and self-signed certs for TLS
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA384
On 06/12/2015 10:10, Mindy wrote:
> We don't have a nice way to generate certificate signing requests
> or self-signed certificates ourselves yet, right? I'm writing up a
> thing on getting HTTPS up and running with mirage-seal and those
> are places where I have to say "invoke openssl or your favorite
> alternative, but we got nothin' for you".
>
> If I'm incorrect, I'd appreciate a pointer on where to go looking.
> :)
While there is not yet any command-line tool, there is support for
creating and signing certificate signing requests on a branch [0]:
````
let write filename data =
Lwt_unix.openfile filename [Unix.O_WRONLY ; Unix.O_CREAT] 0o400
>> = fun fd ->
Lwt_unix.write fd (Cstruct.to_string data) 0 (Cstruct.len data)
>> = fun l ->
assert (l = Cstruct.len data) ;
Lwt_unix.close fd
in
let create_key filename =
(* initialise our Rng *)
Nocrypto_entropy_lwt.initialize () >>= fun () ->
(* generate RSA private key *)
let key = `RSA (Nocrypto.Rsa.generate 2048) in
(* dump to disk *)
let pem = X509.Encoding.Pem.Private_key.to_pem_cstruct1 key in
write filename pem >|= fun () ->
key
in
let create_signing_request ?extensions filename name priv =
let extensions = match extensions with
| None -> []
| Some x -> [`Extensions x]
in
let csr = X509.CA.generate name ~extensions priv in
let pem =
X509.Encoding.Pem.Certificate_signing_request.to_pem_cstruct1 csr in
write filename pem >|= fun () ->
csr
in
let sign_request filename ?extensions req priv =
let cert = X509.CA.sign req ?extensions priv [ `CN "authority" ] in
let pem = X509.Encoding.Pem.Cert.to_pem_cstruct1 cert in
write filename pem >|= fun () ->
cert
in
create_key "server.key" >>= fun key ->
let name = [`CN "mirage.io"] in
let extensions =
[(false, `Key_usage [ `Digital_signature ; `Data_encipherment ]) ;
(true, `Basic_constraints (false, None)) ;
(false, `Subject_alt_name [ `DNS "mirage.io" ; `DNS
"www.mirage.io" ])]
in
create_signing_request "server.csr" ~extensions name key >>= fun csr ->
sign_request "server.pem" ~extensions csr key
````
This code snippet will generate a certificate request server.csr
(which can be submitted to a certificate authority) self-signed
certificate server.pem (valid for a single day, using SHA256 as digest
algorithm) and private key server.key.
There are certainly some rough edges... e.g. `sign` does not respect
the proposed extensions of the signing request (to run a CA, a policy
is needed here: who is allowed to add which extensions, and how to
overwrite them; otherwise clients can easily request certificates
which are valid as certificate authorities)...
Hannes
0: https://github.com/mirleft/ocaml-x509/tree/naming
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAEBCQAGBQJVftPVAAoJELyJZYjffCjuWPsP/1DC3oSLGXZNXFKlceaSIApQ
6lit8TdL3YTBTMX2PB4acgo57PDCBQjV0Fo8CgKQ9/C7ORhMdt7iCAbmRDKNCBqu
tgIUOpkvOVzg+kRx0e8QA/IedHhkrdB7fjKhJJOaIzGr2dKGUaAwKB7XLdRx9VbM
2gfAyhwOIDcITRexOiK9UkMVhYSxuVe0M9mTGePdM0Aajhzkg0jVcn0L5belcOBv
0/DNLH1aZ2gvXGP63/TOWi71tIZqVVbCVdCVvfXO4r7SKZ7kasfMCT7YpF6TWBA3
O8SGoJM/FzSTRGhSSsEe80rzE4rdQQPogtvBIr+v40Hr8gddCZftqb2xEkCFFwUt
vH8BeBllUF1JeyvNAWb4S9AN8lO8y3u6p7i4qK5moNMeKdDJmosNtGqxHAhbePpJ
HBazMK6p1uqG753vLLFKBLNmrQwyRoGF+lK2DHGk4MTijxXPv96+T1xaaoEdSB8/
Tfb550efq8zdB0NGXvjA85S+OHSdNAIwHek7zK2MePTqTZkit+7wg9nLcOo+G0UH
pVhIi4wiaL/5+pvmy0LM1fmOOtlyp/AQlgXy9A3BQ9nRo+LuUc+GB2gGHdXGm9p4
O2B47I79tkVq20/M/tZyt2QZAPTB1uFIa3zJhKfUt4lSfeY9OScCBidtDDxwxgd9
0lNf3hZgo0vT9ZDL6R6r
=jihz
-----END PGP SIGNATURE-----
_______________________________________________
MirageOS-devel mailing list
MirageOS-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/mirageos-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |