Code Monkey home page Code Monkey logo

general-policies's Introduction

Welcome to the OpenSSL Project

openssl logo

github actions ci badge Nightly OS Zoo ci badge Provider Compatibility Daily checks

OpenSSL is a robust, commercial-grade, full-featured Open Source Toolkit for the TLS (formerly SSL), DTLS and QUIC (currently client side only) protocols.

The protocol implementations are based on a full-strength general purpose cryptographic library, which can also be used stand-alone. Also included is a cryptographic module validated to conform with FIPS standards.

OpenSSL is descended from the SSLeay library developed by Eric A. Young and Tim J. Hudson.

The official Home Page of the OpenSSL Project is www.openssl.org.

Table of Contents

Overview

The OpenSSL toolkit includes:

  • libssl an implementation of all TLS protocol versions up to TLSv1.3 (RFC 8446), DTLS protocol versions up to DTLSv1.2 (RFC 6347) and the QUIC (currently client side only) version 1 protocol (RFC 9000).

  • libcrypto a full-strength general purpose cryptographic library. It constitutes the basis of the TLS implementation, but can also be used independently.

  • openssl the OpenSSL command line tool, a swiss army knife for cryptographic tasks, testing and analyzing. It can be used for

    • creation of key parameters
    • creation of X.509 certificates, CSRs and CRLs
    • calculation of message digests
    • encryption and decryption
    • SSL/TLS/DTLS and client and server tests
    • QUIC client tests
    • handling of S/MIME signed or encrypted mail
    • and more...

Download

For Production Use

Source code tarballs of the official releases can be downloaded from www.openssl.org/source. The OpenSSL project does not distribute the toolkit in binary form.

However, for a large variety of operating systems precompiled versions of the OpenSSL toolkit are available. In particular, on Linux and other Unix operating systems, it is normally recommended to link against the precompiled shared libraries provided by the distributor or vendor.

We also maintain a list of third parties that produce OpenSSL binaries for various Operating Systems (including Windows) on the Binaries page on our wiki.

For Testing and Development

Although testing and development could in theory also be done using the source tarballs, having a local copy of the git repository with the entire project history gives you much more insight into the code base.

The official OpenSSL Git Repository is located at git.openssl.org. There is a GitHub mirror of the repository at github.com/openssl/openssl, which is updated automatically from the former on every commit.

A local copy of the Git Repository can be obtained by cloning it from the original OpenSSL repository using

git clone git://git.openssl.org/openssl.git

or from the GitHub mirror using

git clone https://github.com/openssl/openssl.git

If you intend to contribute to OpenSSL, either to fix bugs or contribute new features, you need to fork the OpenSSL repository openssl/openssl on GitHub and clone your public fork instead.

git clone https://github.com/yourname/openssl.git

This is necessary because all development of OpenSSL nowadays is done via GitHub pull requests. For more details, see Contributing.

Build and Install

After obtaining the Source, have a look at the INSTALL file for detailed instructions about building and installing OpenSSL. For some platforms, the installation instructions are amended by a platform specific document.

Specific notes on upgrading to OpenSSL 3.x from previous versions can be found in the ossl-guide-migration(7ossl) manual page.

Documentation

README Files

There are some README.md files in the top level of the source distribution containing additional information on specific topics.

The OpenSSL Guide

There are some tutorial and introductory pages on some important OpenSSL topics within the OpenSSL Guide.

Manual Pages

The manual pages for the master branch and all current stable releases are available online.

Demos

The are numerous source code demos for using various OpenSSL capabilities in the demos subfolder.

Wiki

There is a Wiki at wiki.openssl.org which is currently not very active. It contains a lot of useful information, not all of which is up-to-date.

License

OpenSSL is licensed under the Apache License 2.0, which means that you are free to get and use it for commercial and non-commercial purposes as long as you fulfill its conditions.

See the LICENSE.txt file for more details.

Support

There are various ways to get in touch. The correct channel depends on your requirement. See the SUPPORT file for more details.

Contributing

If you are interested and willing to contribute to the OpenSSL project, please take a look at the CONTRIBUTING file.

Legalities

A number of nations restrict the use or export of cryptography. If you are potentially subject to such restrictions, you should seek legal advice before attempting to develop or distribute cryptographic code.

Copyright

Copyright (c) 1998-2024 The OpenSSL Project Authors

Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson

All rights reserved.

general-policies's People

Contributors

arapov avatar fwh-dc avatar iamamoose avatar juergenchrist avatar levitte avatar mattcaswell avatar paulidale avatar sanumesh avatar sthibaul avatar t-j-h avatar t8m avatar tamaradale avatar tom-cosgrove-arm avatar vavroch2010 avatar zenithalhourlyrate avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

general-policies's Issues

Stop supporting Windows XP and Windows Server 2003 from OpenSSL 3.1

Background:

Our platform policy makes no reference to old versions of Windows. The primary Windows platforms are listed as "VC-WIN64A" and "mingw64" both on Windows 10. There are no community supported Windows platforms. There are a number of Windows platforms in the "unadopted" list - but none of them specify a specific Windows version that they apply to.

In the code we define the macro _WIN32_WINNT to the value 0x0501:

https://github.com/openssl/openssl/blob/4c149cf9f6a2ba665d74dbd4cf44f080816c900b/include/internal/e_os.h#L85-L100

According to the Microsoft documentation this corresponds to Windows XP:

https://docs.microsoft.com/en-us/cpp/porting/modifying-winver-and-win32-winnt?view=msvc-170

This means that (by default) we are unable to use functions introduced later than that in the code. We do have some conditionally compiled code which checks the value of _WIN32_WINNT and, if it is sufficient high, uses more recent functions. It is possible to override the default value at Configure time (e.g. perl Configure -D_WIN32_WINNT=...) - but this possibility does not seem to be documented and it seems unlikely that many people do this.

PR openssl/openssl#18270 proposes updating the default value of _WIN32_WINNT to 0x0600 which would exclude Windows XP and Windows Server 2003 users. Microsoft ended support for Windows XP in April 2014 and for Windows Server 2003 in July 2015.

According to this tweet, 5.6% of Windows curl users say they use it on Windows XP:
https://twitter.com/bagder/status/1534465987269083136

Proposal:

This issue is proposing the following vote text in order that PR openssl/openssl#18270 may proceed:

"We will no longer support Windows XP or Windows Server 2003 from OpenSSL 3.1"

(Note: I am not actually calling this vote yet - just gathering feedback).

OTC requirements for review

Our policy currently says:

All submissions must be reviewed and approved by at least two committers, one of whom must also be an OTC member. Neither of the reviewers can be the author of the submission.

This means that if an OTC member is the author, we also need an OTC member to review it. I'm not sure if that was intentional or not.

Provider ABI testing

Background:

We need to expanding our testing process to cover the ABI guarantee we made for 3.0 for providers.
Some issues have been noted in #19171
Partial fixes are in #19201

All provider modules for all prior releases are meant to be able to work seamlessly with later releases. It was a fundamental part of the provider design for 3.0. We aren't testing this well enough currently.

Proposal:

Prior to any future release, we will confirm the provider ABI works for all prior released versions of provider modules (currently fips and legacy).

Release criteria

We need some release criteria for major, minor, patch, alpha and beta releases.
Removed from the versioning policy (wrt the web page):

Release criteria

For a major or minor release, the following release criteria apply:

  • all open GitHub issues and pull requests older than 2 weeks at the time of
    release need to be assessed for relevance to the version being released.
    Any flagged with the a milestone for the version to be released must
    be closed (see below);
  • clean builds in GitHub Actions for two days and
  • no open Coverity issues (not flagged as False Positive or Ignore).

Valid reasons for closing an issue/PR with a milestone for the version
include:

  • we have just now or sometime in the past fixed the issue;
  • unable to reproduce (following discussion with original reporter
    if possible);
  • working as intended;
  • deliberate decision not to fix this issue until a later release (this
    wouldn't actually close the issue/PR but change the milestone instead) and
  • not enough information and unable to contact reporter.

Exceptions require a vote by the OTC as per the OTC whatever.

A policy for consistent policy titles?

Policy titles are currently a mess, most visible on our website. Some have the words "OpenSSL" or "Policy" in them, while others don't, and some have the latter in the beginning of the title while others have it at the end. This doesn't help readability.

In general policies, this is what it currently looks like:

  • Accessing Sensitive Information Policy
  • Contractors Invoicing Policy
  • Information Release Policy
  • OpenSSL Travel Policy
  • OpenSSL release versioning policy
  • Platform Policy
  • Policy for OpenSSL Committers
  • Policy on Proposing General Policy Changes
  • Security Policy
  • The Public Voting Procedure of OMC

Before making a proposal, I'd like to discuss alternatives that we can throw rocks at.

Improve release cadence and support duration

Dear Maintainers,

I maintain the openssl package in Ubuntu. While doing so, I had many occasions
to reflect on the openssl release schedule. I discussed updates a few months
ago with some people of the team on launchpad and I'm really doing all I can in
order to make it better for everyone but users often have incompatible wishes.

NB:

  • I pondered a lot about the best place to discuss this
  • I will be at FOSDEM and will very happily discuss this in-person

The new release schedule seems very promising but I also have several
concerns with the current release schedule which I think can be fairly easily
improved:

  • due to the long-term maintenance needs, we stick to LTS releases unless we
    are sure there will be another openssl LTS by the next Ubuntu LTS
  • the openssl team will have to maintain concurrently many releases
  • I'm wondering about the audience for interim releases that are maintained for
    2 years but released every 6 months

I'm bringing that up now specifically because Ubuntu 24.04 will still be using
3.0.(latest) unless openssl 3.3 is an LTS (and I arrange for some extra things
due to both ubuntu and openssl releasing in April with beta/RC phases). We
discussed this a lot and couldn't find another way. This also made me think a
lot about the release schedules.

I made a pretty markdown+unicode table/graph in order to explain this.
The Years line (the first one) gives the time in terms of half-years, starting
from an arbitrary point. Full-color blocks indicate full support while shaded
ones indicate security-only maintenance. LTS and Interim releases are grouped
separately due to their different schedule.
The "total" line at the bottom counts how many releases are supported at the
same time.

The first table uses the current release schedule. Except for the first year or
so, there will often be 5 releases supported at the same time, sometimes 4, for
an average of 4.75 in steady state.

Years 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 6.5 7 7.5 8 8.5 9 9.5
LTS ██ ██ ██ ██ ██ ██ ██ ██ ░░ ░░
LTS ██ ██ ██ ██ ██ ██ ██ ██ ░░ ░░
LTS ██ ██ ██ ██
Interim ██ ░░ ░░
Interim ██ ██ ░░ ░░
Interim ██ ██ ░░ ░░
Interim ██ ██ ░░ ░░
Interim ██ ██ ░░ ░░
Interim ██ ██ ░░ ░░
Interim ██ ██ ░░ ░░
Interim ██ ██ ░░ ░░
Interim ██ ██ ░░ ░░
(LTS)
Interim ██ ██ ░░ ░░
Interim ██ ██ ░░ ░░
Interim ██ ██ ░░ ░░
Interim ██ ██ ░░ ░░
Interim ██ ██ ░░ ░░
Interim ██ ██ ░░ ░░
Interim ██ ██ ░░ ░░
Interim ██ ██ ░░ ░░
...
Concurrent 3 4 5 5 5 5 5 5 5 5 4 4 5 5 5 5 5 5 4 4

I believe that the two year support for interim releases is more than needed
because people who are interested in such a duration are probably using LTS
releases instead, while people who upgrade more frequently are ready to update
every 6 or 12 months.

On the other hand, an LTS every two years would be very helpful and would help
updating tremendously, all while keeping the number of concurrently-supported
versions lower than with the current schedule thanks

Years 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 6.5 7 7.5 8 8.5 9 9.5
LTS ██ ██ ██ ██ ██ ██ ██ ██ ░░ ░░
LTS ██ ██ ██ ██ ██ ██ ██ ██ ░░ ░░
LTS ██ ██ ██ ██ ██ ██ ██ ██ ░░ ░░
LTS ██ ██ ██ ██ ██ ██ ██ ██
LTS ██ ██ ██ ██
Interim ░░
Interim ██ ░░
Interim ██ ░░
Interim ██ ░░
Interim ██ ░░
(LTS)
Interim ██ ░░
Interim ██ ░░
Interim ██ ░░
(LTS)
Interim ██ ░░
Interim ██ ░░
Interim ██ ░░
(LTS)
Interim ██ ░░
Interim ██ ░░
Interim ██ ░░
(LTS)
...
Concurrent 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4

Another option could be to keep the same duration for maintenance of interim
releases but release every 12 months instead. I don't think that aligns with
the current goals which probably include releases of a manageable size. (and I
don't want to do another markdown table!).

Do you have opinions on this? I genuinely believe these are small changes that
will be helpful to everyone, especially in the long run.

Thanks.

The next LTS release

This issue to hold a vote on the next LTS release.

The proposal is:

We should announce that the next LTS release will be 3.0

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.