openssl command degenerative examples

The openssl command is available for use by all users. The intended audience for this page is system administrators who can submit requests which IST will recognize._

I started this page as an attempt to start explaining RSA encryption to myself, using openssl command in ways which would not be secure, but would explain how RSA works at a fundamental level.

I hope eventually to integrate this with information such as is found here to provide a full tutorial.

openssl examples

You should be able to go to an empty directory and literally cut-and-paste the following Unix commands to get an idea of SSL key structure.

Generate a new private key

The smallest modulus openssl lets you get away with.
   cscf.cs% openssl genrsa -out toy.key 31
   Generating RSA private key, 31 bit long modulus
   .+++++++++++++++++++++++++++
   .+++++++++++++++++++++++++++
   e is 65537 (0x10001)
   cscf.cs% cat toy.key
   -----BEGIN RSA PRIVATE KEY-----
   MCsCAQACBHLWmLUCAwEAAQIEOTZbkQIDANHDAgMAjCcCAi6rAgJMawIDAJfW
   -----END RSA PRIVATE KEY-----
   cscf.cs% 
To ease following the tutorial, perhaps put the above key into a file instead of what you get. (At least for one of your runs).

View details of that private key

    cscf.cs% openssl rsa < toy.key -text
    Private-Key: (31 bit)
    modulus: 1926666421 (0x72d698b5)
    publicExponent: 65537 (0x10001)
    privateExponent: 959863697 (0x39365b91)
    prime1: 53699 (0xd1c3)
    prime2: 35879 (0x8c27)
    exponent1: 11947 (0x2eab)
    exponent2: 19563 (0x4c6b)
    coefficient: 38870 (0x97d6)
    writing RSA key
    -----BEGIN RSA PRIVATE KEY-----
    MCsCAQACBHLWmLUCAwEAAQIEOTZbkQIDANHDAgMAjCcCAi6rAgJMawIDAJfW
    -----END RSA PRIVATE KEY-----
    cscf.cs% 
In addition, the following allows you to correlate the above details to positions in the base64 encoded binary form.
    cscf.cs% cat toy.key | sed '/^-/d' | /usr/local/bin/base64 -d | od -t x1
    0000000 30 2b 02 01 00 02 04 72 d6 98 b5 02 03 01 00 01
    0000020 02 04 39 36 5b 91 02 03 00 d1 c3 02 03 00 8c 27
    0000040 02 02 2e ab 02 02 4c 6b 02 03 00 97 d6
    0000055
    cscf.cs% 
If using Ubuntu, the base64 command should be available as /usr/bin/base64, probably on your PATH. It appears to be part of the coreutils package.

Show the public key corresponding to a private key

    cscf.cs% openssl rsa -in toy.key -pubout
    writing RSA key
    -----BEGIN PUBLIC KEY-----
    MB8wDQYJKoZIhvcNAQEBBQADDgAwCwIEctaYtQIDAQAB
    -----END PUBLIC KEY-----
    cscf.cs% 

View details of that public key

    cscf.cs% openssl rsa -in toy.key -pubout | openssl rsa -pubin -text
    writing RSA key
    Modulus (31 bit): 1926666421 (0x72d698b5)
    Exponent: 65537 (0x10001)
    writing RSA key
    -----BEGIN PUBLIC KEY-----
    MB8wDQYJKoZIhvcNAQEBBQADDgAwCwIEctaYtQIDAQAB
    -----END PUBLIC KEY-----
    cscf.cs% 

    cscf.cs% openssl rsa -in toy.key -pubout | sed '/^-/d' | \<br />         /usr/local/bin/base64 -d | od -t x1
    writing RSA key
    0000000 30 1f 30 0d 06 09 2a 86 48 86 f7 0d 01 01 01 05
    0000020 00 03 0e 00 30 0b 02 04 72 d6 98 b5 02 03 01 00
    0000040 01
    0000041
    cscf.cs% 

Generate a new Certificate Signing Request (CSR)

This key is too small to use to generate a CSR.

Generate a larger private key for self-signed certificate or CSR

The smallest number of bits I seemed to be able to specify and then generate a self-signed certificate was 361.

   cscf.cs% openssl genrsa -out toy.key 361
   Generating RSA private key, 361 bit long modulus
   ........++++++++++++++++++
   .................................++++++++++++++++++
   e is 65537 (0x10001)
   cscf.cs% openssl req -new -key toy.key -x509 -out new.pem -subj /CN=toy.uwaterloo.ca
   cscf.cs% openssl req -new -key toy.key -out new.csr -subj /CN=toy.uwaterloo.ca
   cscf.cs% 

The prime numbers there are all to large to be shown in digit form, and instead all are shown in hex byte format. So they won't help a lot in understanding the algorithms.

-- AdrianPepper - 13 Sep 2011

Topic revision: r7 - 2012-12-07 - AdrianPepper
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback