commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Martin Cooper <mfncoo...@gmail.com>
Subject Re: [Jakarta Commons Wiki] New: SigningReleases
Date Tue, 04 Jan 2005 23:45:24 GMT
There's another copy of this page in the incubator wiki. It seems to
me that it would be better to have one copy in the ASF-wide wiki,
where all projects can refer to it, since otherwise, multiple copies
are going to be out of sync.

--
Martin Cooper


On Tue, 04 Jan 2005 23:38:38 -0000, commons-dev@jakarta.apache.org
<commons-dev@jakarta.apache.org> wrote:
>   Date: 2005-01-04T15:38:37
>   Editor: DirkVerbeeck
>   Wiki: Jakarta Commons Wiki
>   Page: SigningReleases
>   URL: http://wiki.apache.org/jakarta-commons/SigningReleases
> 
>   Copy from the old wiki http://wiki.apache.org/old/SigningReleases?action=raw
> 
> New Page:
> 
> = Signing a release version =
> 
> Releases must be signed prior to release, but the procedure for how to sign releases
hasn't been formalized so far. This document is a scratchboard to gather links and resources
so that we can end up with a document with adequate info for the novice ReleaseManager, to
be transcribed and put [http://www.apache.org/dev/ here].
> 
> This procedure has been formalised and well documented for httpd, available at http://httpd.apache.org/dev/release.html.
Java based projects may find the [http://jakarta.apache.org/commons/releases jakarta commons
release document] useful.
> 
> Note that for some good commentary on how users can verify signatures (with some useful
background), see http://httpd.apache.org/dev/verification.html
> 
> ----
> '''Important'''
> 
> Signing requires a private key.  Private keys should not be stored on our public servers,
baring some policy statement to the contrary.
> 
> Release Managers typically build and sign the release on their own secured systems, and
then push them to the ASF infrastructure, where other Committers and the Community can check
them prior to a release vote.
> 
> ----
> ''Some discussion about writing this page...''
> 
> Not true. There are so many assumptions in this document that it is virtually unusable
for other projects. Some examples:
> 
> *  Assumes that the RM even knows what PGP and GPG are
> *  Assumes that the RM has a public key and/or knows how to get one
> *  Assumes the RM knows how to publish a key and even what that means
> 
> Well, frankly I'd suggest that performing signing operations is mostly pointless unless
you understand the basic ideas of cryptographic signatures, and that an RM should be capable
of educating himself to the extent that he *is* aware of the issues.
> 
> If you're looking for a good place to start, http://www.gnupg.org/gph/en/manual.html
defines the concepts quite nicely.
> 
> Understanding digital signatures and using the specific tools are two different things.
For example, I know a fair amount about encryption, signatures, certs, CRLs, etc., because
I work for an internet security company, and the product I work on uses these technologies
extensively. However, as an individual user, I had not had to use the PGP or ["GnuPG"] tools
until I recently needed to sign an Apache release. My purpose in suggesting a page such as
this was to help people with the mechanics of signing a release, not to educate them on what
cryptography is or why releases should be signed.
> 
> The value of this page is that it shows what a Release Manager needs to learn. Step-By-Step
instructions have the fault that they seems to imply that so long as the steps are followed,
everything will be okay. Whereas, they are best thought of as aide memoirs detailing the minimum
actions that are required to cut a release.
> {{{  }}}
> == Why we need to sign releases ==
> 
> Signing releases assures users that the software package they just download has not been
tampered with since it was built.  Users can get the cryptographic signature .asc/.sig file
with the release and use their own copy of PGP/GPG/whatever to 'Verify' the signature, which
proves that the software package was not changed since it was signed.  It is part of the ASF's
duty to ensure that we take reasonable precautions that the software we deliver to users is
good and has not been tampered with.
> 
> The ASF protects releases in two ways. Most users don't need to know who cut the release
just that the release was not tampered it left apache. MD5 sums are ideally suited for this.
Developers and the ASF also need to know that the distribution was cut by the offical release
manager and that the release has not been tampered with since it was built. Digital signatures
allow this to happen. That's why MD5 sums and signatures are needed for all releases.  (use
"openssl md5" or equivalent to generate an MD5 - i.e. openssl md5 filename > filename.md5)
> {{{  }}}
> (Can someone confirm where we state this policy officially? Also: I ''think'' we should
restrict signing to only be committers, since the ASF has a specific relationship with committers
via CLA, etc.  -sc)
> 
> == What you need to do ==
> 
> *  create your own PGP or GPG key
> *  publish your key to the KEYS file
> *  sign the release to create a detached signature file
> *  post the release and its signature to the distribution directory
> *  (optional) adding a checksum file to the dist directory
> *  point to instructions on how to verify signatures
> 
> == Tools you can use ==
> 
> PGP[pgp]
> 
> Free:
> *  '''PGP 8.0 Freeware''' - http://www.pgpi.org/products/pgp/versions/freeware/
>   *  Apparently, different versions of PGP require different command line options, or
even different commands. For example, some Apache KEYS files say to use 'pgpk -ll', but PGP
6.5.8 has only pgp, not pgpk. At this point, I don't know which version uses what, but I'll
see what I can find.  Note that most modern PGP versions have handy GUIs as well.
> *  '''The GNU Privacy Guard''' - http://www.gnupg.org/  Many add-ins and GUIs for GPG
exist now as well.
> Commercial:
> *  '''PGP 8.0''' - http://www.pgp.com/
> 
> == Signing files with PGP 8.0 Freeware ==
> 
> To sign a file with PGP 8.0, you need to run PGPmail, despite the fact that signing the
release itself is not related to e-mail.
> 
> With PGPmail running, select the 'Sign' option, and then select the file(s) you want
to sign. If you select multiple files, a separate detached signature file will be created
for each file. When the Enter Passphrase dialog appears, make sure you select the correct
signing key, and check the 'Detached Signature' and 'Text Output' checkboxes. Then enter your
passphrase, and click OK. (Note that if you have already signed a file since starting PGPmail,
your passphrase may be cached, so you will not need to enter it again.)
> 
> PGPmail will create a detached signature file for each selected file, in the same directory
as the original files. The files are created with a .sig extension, so you will need to rename
them to have a .asc extension, per Apache convention.
> (Note: many projects still use .sig, so either extension should be OK for now -sc)
> 
> NOTE: The above instructions may also work for the commercial version of PGP 8.0, but
since I don't have that available, I can't check.
> 
> === Step by Step for PGP 8.0 Windows ==
> 
> For PGP 8.0 Windows, you have to
> 
> ["Onetime setup"]
> 
> *  Unzip the install program
> *  Run the install program (and restart)
> *  Press["Later"] on the registration screen. (We can preview indefinately for non-profit
use.)
> *  Enter your personal name and email (@apache.org), and a passphrase. (8 characters
or more.)
> *  After the keys are generated, open the PGPKeys applet.
> *  Run Server/Send To/Domain Server to register your public key with pgp.com.
> *  Run Keys/Export to save your public key as a text file. Add the contents to your project's
KEYS FILE.
> *  Close PGPKeys
> 
> ["Signing ritual"]
> 
> *  Open PGPMail
> *  The document button brings up a standard file dialog. Select the *.zip and *.gz files
to sign. Check "Detached Signature" and "Text Output".
> *  PGP generates plain-text *.sig files (which you can rename to *.asc).
> *  Close PGPMail
> *  Upload the *.asc files to the distribution directory, along with your public key.
> 
> Note that if PGPMail skips the dialog where you choose "Detached Signature" and so forth,
clear its cache.
> 
> To learn more aobut PGP 8.0, see the bundled documentation, which is quite good.
> 
> == Publish your key to the KEYS file ==
> 
> You need to publish just the '''public''' half of your PGP/GPG key so that users can
download it to verify the signatures later.  You must publish it to the KEYS file that should
be checked into CVS - either in your subproject's area, or perhaps in a global KEYS file somewhere
on Apache.  You may also wish to publish it to public keyservers as well, although this is
optional.  Note that the ASF does not have a specific public keyserver.  To publish your key
to the KEYS file, just export the public half of your key into a plain text file, and then
just copy and paste it into the KEYS file.  You can optionally add a line above your key with
your name on it, but this is not required.  Be sure to checkin the KEYS file before uploading
the release!
> 
> Some public servers you might consider:
> 
> ldap://keyserver.pgp.com
> *  note that many builds of at least ["GnuPG"] aren't LDAP-enabled
> 
> x-hkp://the.earth.li
> 
> ldap://europe.keys.pgp.com:11370
> 
> http://pgpkeys.mit.edu
> x-hkp://pgp.mit.edu
> 
> are both on the pgp-keys network.
> ----
> == Using GPG ==
> 
> This does '''not''' replace the official documentation.  It is simply a list of steps
that work.
> 
> '''Create your key'''
> *  gpg --gen-key
> '''Export your key, appending to the project's KEYS file'''
> *  (gpg --list-sigs '''your name''' && gpg --armor --export '''your name''')
>> KEYS
> '''Signing files'''
> *  for i in *.zip; do gpg --output $i.asc --detach-sig --armor $i; done
> *  for i in *.gz; do gpg --output $i.asc --detach-sig --armor $i; done
> 
> Adjust the list as necessary.
> 
> Good luck!  :-)
> ----
> === The Apache Web of Trust ===
> 
> If all possible, please get your key cross-signed with some people in the apache web-of-trust;
see
> 
> {{{    http://www.apache.org/~henkp/trust/apache.html }}}
> 
> === Step by Step ===
> 
> {{{ EXPORT
> 
>  create an 'ascii armored' (plain text) version of your public key:
> 
>    gpg --armor --export 'your name'
> 
>  then you point your browser to 'pgp.mit.edu' and paste your public
>  key in the box under 'Submit a key', click 'Submit this key ..'.
> 
>  It gets sent to a lot of other keyservers too. Now you're public!
> 
>  SIGNING
> 
>  There is protocol for this, but basicly it comes down to this.
> 
>  -- Find someone (we'll call him/her Joe) who is in the apache
>     web-of-trust ; someone you can meet face-to-face.
> 
>  -- go and meet Joe, be sure to bring the output of
> 
>       gpg -a -v --fingerprint --list-key 'your name'
> 
>     and some photo ID. Joe will do the same.
> 
>  -- Verify that that Joe is who he says he is (by photo ID)
> 
>  -- make Joe say that the key on the paper is his ; let him sign it
>     Ask Joe to identify the uid's (email addresses) you are
>      supposed to sign.
> 
>  -- take home the paper with Joe's key and finger print
> 
>  -- At home, get Joe's key from pgp.mit.edu (say the ID of
>     Joe's key is 0xABABABA
> 
>       gpg --keyserver pgp.mit.edu --recv-key 0xABABABA
> 
>  -- verify that the fingerprint on the key
> 
>       gpg -v --with-fingerprint --list-key 0xABABABA
> 
>     is the same as the one on the paper
> 
>  -- To each of the uid's you are supposed to sign, send a random message,
>     crypted with Joe's key, Joe should be able to read and decrypt each
>     random message. Of course you only sign the uid's that check out.
>     To crypt a file MESAGE with Joe's key :
> 
>       gpg -v -e -r 0xABABABA MESAGE
> 
>  -- sign Joe's key ; horse around with
> 
>       gpg --edit 0xABABABA
> 
>  -- after you signed the key, extract
> 
>       gpg -a --export 0xABABABA
> 
>     and send it to Joe or submit it to pgp.mit.edu :
> 
>       gpg -v --key-server pgp.mit.edu --send-key 0xABABABA
> 
>  -- done.
> 
>  Some more :
> 
>    http://www.lysator.liu.se/~jc/signing-policy.html
> 
>  If you don't know any apache people in your area, look for others
>  you can cross-sign with. }}}
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-dev-help@jakarta.apache.org
> 
>

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


Mime
View raw message