OpenVPN 3 Core Library
Loading...
Searching...
No Matches
test_openssl_x509certinfo.cpp
Go to the documentation of this file.
1// OpenVPN -- An application to securely tunnel IP networks
2// over a single port, with support for SSL/TLS-based
3// session authentication and key exchange,
4// packet encryption, packet authentication, and
5// packet compression.
6//
7// Copyright (C) 2012- OpenVPN Inc.
8//
9// SPDX-License-Identifier: MPL-2.0 OR AGPL-3.0-only WITH openvpn3-openssl-exception
10//
11//
12//
13// Basic unit test for the openvpn/openssl/pki/x509certinfo.hpp functions
14//
15
16#include <string>
17
18#include "test_common.hpp"
21
22using namespace openvpn;
23
24namespace unittests {
25
26std::string test_cert = "-----BEGIN CERTIFICATE-----\n"
27 "MIIFrjCCA5agAwIBAgIJFXABl4gwlJIEMA0GCSqGSIb3DQEBCwUAMHAxCzAJBgNV\n"
28 "BAYTAlVTMQswCQYDVQQIDAJDQTETMBEGA1UEBwwKUGxlYXNhbnRvbjEYMBYGA1UE\n"
29 "CgwPT3BlblZQTi1URVNULUNBMSUwIwYJKoZIhvcNAQkBFhZleGFtcGxlLmNhQGV4\n"
30 "YW1wbGUubmV0MB4XDTE5MTAwMjEyMzY0OFoXDTI5MDkyOTEyMzY0OFowezELMAkG\n"
31 "A1UEBhMCVVMxCzAJBgNVBAgMAkNBMRUwEwYDVQQKDAxPcGVuVlBOLVRFU1QxHTAb\n"
32 "BgNVBAMMFHNlcnZlci0xLmV4YW1wbGUubmV0MSkwJwYJKoZIhvcNAQkBFhpleGFt\n"
33 "cGxlLXNlcnZlckBleGFtcGxlLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC\n"
34 "AQoCggEBAN7KKMU2A7X74KYn+agBvQmW2zr/OFH/PJn6sMk94aDAIWsa7KccuV8W\n"
35 "d/69XH2FXK2ygSd9df8kO8mGkDl1w5nC/LUk5V0KNqsZGLyNDRvulSFJ2eQChOOs\n"
36 "snOdpf17e/yzs08KY5RME9+HBWx2GpQQWHVsmqvPF+pPJnBctOm8azBOAUZRDBuj\n"
37 "TxCWtwLwVjnFHGSATETuvCiTPuDa9sbw5ibCLFz9ge94ptXcXEU6z+GuighQI9rU\n"
38 "o8BVFF6DiaWZn3jC5KsA1dX81c+UpDpxwOpG9MXg8RRm8rWwsvC/RvjVYjGDBdra\n"
39 "oSuHWPjzH1DIJ31ptjKUPAVdR8ZxAGcCAwEAAaOCAT4wggE6MAkGA1UdEwQCMAAw\n"
40 "EQYJYIZIAYb4QgEBBAQDAgZAMDQGCWCGSAGG+EIBDQQnFiVUZXN0IENlcnRpZmlj\n"
41 "YXRlIC0gTk9UIEZPUiBQUk9EVUNUSU9OMB0GA1UdDgQWBBRsQDoK1XxrwQdrKmcC\n"
42 "7/HfbSrQFTCBogYDVR0jBIGaMIGXgBTa10VpSdTIo1PhrwMuGmGrUMerq6F0pHIw\n"
43 "cDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRMwEQYDVQQHDApQbGVhc2FudG9u\n"
44 "MRgwFgYDVQQKDA9PcGVuVlBOLVRFU1QtQ0ExJTAjBgkqhkiG9w0BCQEWFmV4YW1w\n"
45 "bGUuY2FAZXhhbXBsZS5uZXSCCQDm/rJ9Tz3bEDATBgNVHSUEDDAKBggrBgEFBQcD\n"
46 "ATALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQELBQADggIBAHl41WvFsh+nscCx+1X2\n"
47 "RudmnsuKHFUAktpAOdG3vh+5zh2v3PZYWoS4sgmBl0Zvia4VC/xTrcC2ywJILLAM\n"
48 "cda6CUXMF3+kJMi+qlgn6WRn9RsUHLQFa1/y7zNkuo38zkLlJaiKPQfm1YPkUtnr\n"
49 "n74W9XBrZ2rWBsqL2XCDayEs1IAjL9zs0F1Bs0MCgf+BccCu7wFL886+Y8mhAkRJ\n"
50 "c0aniG/bsawOrrF8JwW2MP/QpPls2BSWmfwJASxX57AbSQ8TmMf289ozTupcBVMC\n"
51 "N973ks9n/35cRtW9SHtwpdsb4nvXFZi6DCfyS3PBpHgi/mRuhgWWSLaVr40RnlHI\n"
52 "NvW0x7SPJwkbHeWz6PStrZJLjkJ9LuvRQwb2+wH6SjIxQiJ/AMXlSL2USASdLR32\n"
53 "eiPUWq5xalTrNQINcnEfVT/ruTInY2vytUaQgFTQvJKp0DJZZHEmkvEQC77IkI7Y\n"
54 "ED4Icu9CLCpXN7axV4Ga0iM53kX4MsDt419mmD8NoYJciHzBZHuJ6cD1tAsUUov7\n"
55 "NJZQLYfixIs63ZNEgb5gCkKywy40gZ+jaK3ard5LzyRUhgWHXdV7oZU7DkY5yAON\n"
56 "63gBg9THgEvcEhG/Ci60y6pB+YpXTiVGkuJvqLdSCn3qota8v+/Fm9ujrlJk1evR\n"
57 "fYFKjF0w1F5ftfpCbucSMbqt\n"
58 "-----END CERTIFICATE-----\n";
59
60TEST(OpenSSL_X509_get_subject, old_format)
61{
62 OpenSSLPKI::X509 x509crt(test_cert, "Embedded Test Server Cert");
63 std::string expect(
64 "/C=US/ST=CA/O=OpenVPN-TEST/CN=server-1.example.net/"
65 "emailAddress=example-server@example.net");
66
67 ASSERT_EQ(OpenSSLPKI::x509_get_subject(x509crt.obj()), expect);
68 ASSERT_EQ(OpenSSLPKI::x509_get_subject(x509crt.obj(), false), expect);
69}
70
71TEST(OpenSSL_X509_get_subject, new_format)
72{
73 OpenSSLPKI::X509 x509crt(test_cert, "Embedded Test Server Cert");
74 std::string expect(
75 "C=US, ST=CA, O=OpenVPN-TEST, CN=server-1.example.net, "
76 "emailAddress=example-server@example.net");
77
78 ASSERT_EQ(OpenSSLPKI::x509_get_subject(x509crt.obj(), true), expect);
79}
80
81TEST(OpenSSL_X509_get_serial, numeric)
82{
83 OpenSSLPKI::X509 x509crt(test_cert, "Embedded Test Server Cert");
84 std::string expect("395452524166311612932");
85
86 ASSERT_EQ(OpenSSLPKI::x509_get_serial(x509crt.obj()), expect);
87}
88
89TEST(OpenSSL_X509_get_serial, hexadecimal)
90{
91 OpenSSLPKI::X509 x509crt(test_cert, "Embedded Test Server Cert");
92 std::string expect("15:70:01:97:88:30:94:92:04");
93
94 ASSERT_EQ(OpenSSLPKI::x509_get_serial_hex(x509crt.obj()), expect);
95}
96
97TEST(OpenSSL_X509_get_field, basic_checks)
98{
99 OpenSSLPKI::X509 x509crt(test_cert, "Embedded Test Server Cert");
100
101 ASSERT_EQ(OpenSSLPKI::x509_get_field(x509crt.obj(), NID_commonName),
102 "server-1.example.net");
103
104 ASSERT_EQ(OpenSSLPKI::x509_get_field(x509crt.obj(), NID_stateOrProvinceName),
105 "CA");
106
107 ASSERT_EQ(OpenSSLPKI::x509_get_field(x509crt.obj(), NID_localityName), "");
108
109 ASSERT_EQ(OpenSSLPKI::x509_get_field(x509crt.obj(), NID_pkcs9_emailAddress),
110 "example-server@example.net");
111
112 ASSERT_EQ(OpenSSLPKI::x509_get_field(x509crt.obj(), NID_organizationName),
113 "OpenVPN-TEST");
114
115 ASSERT_EQ(OpenSSLPKI::x509_get_field(x509crt.obj(), NID_countryName), "US");
116}
117
118TEST(OpenSSL_X509_get_field, signature)
119{
120 OpenSSLPKI::X509 x509crt(test_cert, "Embedded Test Server Cert");
121
122 ASSERT_EQ(OpenSSLPKI::x509_get_signature_algorithm(x509crt.obj()), "RSA-SHA256");
123}
124
125TEST(x509_get_fingerprint, output)
126{
127 OpenSSLPKI::X509 x509crt(test_cert, "Embedded Test Server Cert");
128 const std::vector<uint8_t> fingerprint = {
129 // clang-format off
130 0x44, 0xF5, 0xA6, 0x4D, 0x4A, 0xCB, 0x65, 0xE1,
131 0x8A, 0x9F, 0x55, 0x89, 0x7F, 0x77, 0xA0, 0x79,
132 0xAA, 0xFB, 0xCC, 0xA1, 0x37, 0x2F, 0xD8, 0xB3,
133 0x47, 0xAA, 0x9D, 0xE3, 0xD0, 0x76, 0xB1, 0x44
134 // clang-format on
135 };
136 ASSERT_EQ(OpenSSLPKI::x509_get_fingerprint(x509crt.obj()), fingerprint);
137}
138
139
140} // namespace unittests
::X509 * obj() const
Definition x509.hpp:82
static std::string x509_get_serial_hex(::X509 *cert)
static std::string x509_get_field(::X509 *cert, const int nid)
static std::string x509_get_serial(::X509 *cert)
static std::vector< uint8_t > x509_get_fingerprint(const ::X509 *cert)
static std::string x509_get_subject(::X509 *cert, bool new_format=false)
static std::string x509_get_signature_algorithm(const ::X509 *cert)
TEST(CPUTime, cpu_time_pid)