mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-12-04 23:22:22 +01:00
e4520c8bd1
Summary: Release notes can be found at https://www.openssl.org/news/openssl-3.0-notes.html . Obtained from: https://www.openssl.org/source/openssl-3.0.8.tar.gz Differential Revision: https://reviews.freebsd.org/D38835 Test Plan: ``` $ git status On branch vendor/openssl-3.0 nothing to commit, working tree clean $ (cd ..; fetch http://www.openssl.org/source/openssl-${OSSLVER}.tar.gz http://www.openssl.org/source/openssl-${OSSLVER}.tar.gz.asc) openssl-3.0.8.tar.gz 14 MB 4507 kBps 04s openssl-3.0.8.tar.gz.asc 833 B 10 MBps 00s $ set | egrep '(XLIST|OSSLVER)=' OSSLVER=3.0.8 XLIST=FREEBSD-Xlist $ gpg --list-keys /home/ngie/.gnupg/pubring.kbx ----------------------------- pub rsa4096 2014-10-04 [SC] 7953AC1FBC3DC8B3B292393ED5E9E43F7DF9EE8C uid [ unknown] Richard Levitte <richard@levitte.org> uid [ unknown] Richard Levitte <levitte@lp.se> uid [ unknown] Richard Levitte <levitte@openssl.org> sub rsa4096 2014-10-04 [E] $ gpg --verify openssl-${OSSLVER}.tar.gz.asc openssl-${OSSLVER}.tar.gz gpg: Signature made Tue Feb 7 05:43:55 2023 PST gpg: using RSA key 7953AC1FBC3DC8B3B292393ED5E9E43F7DF9EE8C gpg: Good signature from "Richard Levitte <richard@levitte.org>" [unknown] gpg: aka "Richard Levitte <levitte@lp.se>" [unknown] gpg: aka "Richard Levitte <levitte@openssl.org>" [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 7953 AC1F BC3D C8B3 B292 393E D5E9 E43F 7DF9 EE8C $ (cd vendor.checkout/; git status; find . -type f -or -type l | cut -c 3- | sort > ../old) On branch vendor/openssl-3.0 nothing to commit, working tree clean $ tar -x -X $XLIST -f ../openssl-${OSSLVER}.tar.gz -C .. $ rsync --exclude FREEBSD.* --delete -avzz ../openssl-${OSSLVER}/* . $ cat .git gitdir: /home/ngie/git/freebsd-src/.git/worktrees/vendor.checkout $ diff -arq ../openssl-3.0.8 . Only in .: .git Only in .: FREEBSD-Xlist Only in .: FREEBSD-upgrade $ git status FREEBSD* On branch vendor/openssl-3.0 nothing to commit, working tree clean $ ``` Reviewers: emaste, jkim Subscribers: imp, andrew, dab Differential Revision: https://reviews.freebsd.org/D38835
146 lines
5.3 KiB
Markdown
146 lines
5.3 KiB
Markdown
Providers
|
|
=========
|
|
|
|
- [Standard Providers](#standard-providers)
|
|
- [The Default Provider](#the-default-provider)
|
|
- [The Legacy Provider](#the-legacy-provider)
|
|
- [The FIPS Provider](#the-fips-provider)
|
|
- [The Base Provider](#the-base-provider)
|
|
- [The Null Provider](#the-null-provider)
|
|
- [Loading Providers](#loading-providers)
|
|
|
|
Standard Providers
|
|
==================
|
|
|
|
Providers are containers for algorithm implementations. Whenever a cryptographic
|
|
algorithm is used via the high level APIs a provider is selected. It is that
|
|
provider implementation that actually does the required work. There are five
|
|
providers distributed with OpenSSL. In the future we expect third parties to
|
|
distribute their own providers which can be added to OpenSSL dynamically.
|
|
Documentation about writing providers is available on the [provider(7)]
|
|
manual page.
|
|
|
|
[provider(7)]: https://www.openssl.org/docs/man3.0/man7/provider.html
|
|
|
|
The Default Provider
|
|
--------------------
|
|
|
|
The default provider collects together all of the standard built-in OpenSSL
|
|
algorithm implementations. If an application doesn't specify anything else
|
|
explicitly (e.g. in the application or via config), then this is the provider
|
|
that will be used. It is loaded automatically the first time that we try to
|
|
get an algorithm from a provider if no other provider has been loaded yet.
|
|
If another provider has already been loaded then it won't be loaded
|
|
automatically. Therefore if you want to use it in conjunction with other
|
|
providers then you must load it explicitly.
|
|
|
|
This is a "built-in" provider which means that it is compiled and linked
|
|
into the libcrypto library and does not exist as a separate standalone module.
|
|
|
|
The Legacy Provider
|
|
-------------------
|
|
|
|
The legacy provider is a collection of legacy algorithms that are either no
|
|
longer in common use or considered insecure and strongly discouraged from use.
|
|
However, some applications may need to use these algorithms for backwards
|
|
compatibility reasons. This provider is **not** loaded by default.
|
|
This may mean that some applications upgrading from earlier versions of OpenSSL
|
|
may find that some algorithms are no longer available unless they load the
|
|
legacy provider explicitly.
|
|
|
|
Algorithms in the legacy provider include MD2, MD4, MDC2, RMD160, CAST5,
|
|
BF (Blowfish), IDEA, SEED, RC2, RC4, RC5 and DES (but not 3DES).
|
|
|
|
The FIPS Provider
|
|
-----------------
|
|
|
|
The FIPS provider contains a sub-set of the algorithm implementations available
|
|
from the default provider, consisting of algorithms conforming to FIPS standards.
|
|
It is intended that this provider will be FIPS140-2 validated.
|
|
|
|
In some cases there may be minor behavioural differences between algorithm
|
|
implementations in this provider compared to the equivalent algorithm in the
|
|
default provider. This is typically in order to conform to FIPS standards.
|
|
|
|
The Base Provider
|
|
-----------------
|
|
|
|
The base provider contains a small sub-set of non-cryptographic algorithms
|
|
available in the default provider. For example, it contains algorithms to
|
|
serialize and deserialize keys to files. If you do not load the default
|
|
provider then you should always load this one instead (in particular, if
|
|
you are using the FIPS provider).
|
|
|
|
The Null Provider
|
|
-----------------
|
|
|
|
The null provider is "built-in" to libcrypto and contains no algorithm
|
|
implementations. In order to guarantee that the default provider is not
|
|
automatically loaded, the null provider can be loaded instead.
|
|
|
|
This can be useful if you are using non-default library contexts and want
|
|
to ensure that the default library context is never used unintentionally.
|
|
|
|
Loading Providers
|
|
=================
|
|
|
|
Providers to be loaded can be specified in the OpenSSL config file.
|
|
See the [config(5)] manual page for information about how to configure
|
|
providers via the config file, and how to automatically activate them.
|
|
|
|
[config(5)]: https://www.openssl.org/docs/man3.0/man5/config.html
|
|
|
|
The following is a minimal config file example to load and activate both
|
|
the legacy and the default provider in the default library context.
|
|
|
|
openssl_conf = openssl_init
|
|
|
|
[openssl_init]
|
|
providers = provider_sect
|
|
|
|
[provider_sect]
|
|
default = default_sect
|
|
legacy = legacy_sect
|
|
|
|
[default_sect]
|
|
activate = 1
|
|
|
|
[legacy_sect]
|
|
activate = 1
|
|
|
|
It is also possible to load providers programmatically. For example you can
|
|
load the legacy provider into the default library context as shown below.
|
|
Note that once you have explicitly loaded a provider into the library context
|
|
the default provider will no longer be automatically loaded. Therefore you will
|
|
often also want to explicitly load the default provider, as is done here:
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#include <openssl/provider.h>
|
|
|
|
int main(void)
|
|
{
|
|
OSSL_PROVIDER *legacy;
|
|
OSSL_PROVIDER *deflt;
|
|
|
|
/* Load Multiple providers into the default (NULL) library context */
|
|
legacy = OSSL_PROVIDER_load(NULL, "legacy");
|
|
if (legacy == NULL) {
|
|
printf("Failed to load Legacy provider\n");
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
deflt = OSSL_PROVIDER_load(NULL, "default");
|
|
if (deflt == NULL) {
|
|
printf("Failed to load Default provider\n");
|
|
OSSL_PROVIDER_unload(legacy);
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
/* Rest of application */
|
|
|
|
OSSL_PROVIDER_unload(legacy);
|
|
OSSL_PROVIDER_unload(deflt);
|
|
exit(EXIT_SUCCESS);
|
|
}
|