File: ssl_certs.ml

package info (click to toggle)
ocaml-ssl 0.7.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 448 kB
  • sloc: ml: 1,568; ansic: 1,547; makefile: 35
file content (59 lines) | stat: -rw-r--r-- 1,969 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
open Alcotest
open Util

let test_read_cert () =
  let cert = Ssl.read_certificate "client.pem" in
  check bool "no errors" true (Ssl.get_error_string () |> check_ssl_no_error);
  let issuer = Ssl.get_issuer cert in
  let subject = Ssl.get_subject cert in
  let start_date = Ssl.get_start_date cert in
  let expiration_date = Ssl.get_expiration_date cert in
  let digest = Ssl.digest `SHA1 cert in
  check
    string
    "read issuer"
    "/C=US/ST=California/L=San Francisco/O=Piaf/CN=CA"
    issuer;
  check
    string
    "read subject"
    "/C=US/ST=California/L=San Francisco/O=Ocaml-ssl/CN=localhost"
    subject;
  check int "read start date" 26 start_date.tm_mday;
  check int "read expiration date" 23 expiration_date.tm_mday;
  check
    string
    "read digest"
    "_m\228R\240\250\023\253\1927\146CP(W'\238z\2489"
    digest

let test_cert_connection () =
  let addr = Unix.ADDR_INET (Unix.inet_addr_of_string "127.0.0.1", 1338) in
  Util.server_thread addr None |> ignore;

  let context = Ssl.create_context TLSv1_3 Client_context in
  let set_default = Ssl.set_default_verify_paths context in
  Ssl.load_verify_locations context "ca.pem" "";
  let ssl = Ssl.open_connection_with_context context addr in
  let cert = Ssl.get_certificate ssl in
  let subject = Ssl.get_subject cert in
  let verify_result = Ssl.get_verify_result ssl in
  let error_string = Ssl.get_verify_error_string 0 in
  Ssl.shutdown_connection ssl;
  check bool "set default succeded" true set_default;
  check
    string
    "check certificate"
    "/C=US/ST=California/L=San Francisco/O=Ocaml-ssl-server/CN=localhost"
    subject;
  check int "check verify result" 0 verify_result;
  check string "check error string" "ok" error_string

let () =
  Alcotest.run
    "Ssl certificate functions"
    [ ( "Certificates"
      , [ test_case "Read certificate functions" `Quick test_read_cert
        ; test_case "Certificate on connection" `Quick test_cert_connection
        ] )
    ]