/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to debian/mandos-client.postinst

  • Committer: Teddy Hogeborn
  • Date: 2019-02-10 03:50:20 UTC
  • Revision ID: teddy@recompile.se-20190210035020-nttr1tybgwwixueu
Show debconf note about new TLS key IDs

If mandos-client did not see TLS keys and had to create them, or if
mandos sees GnuTLS version 3.6.6 or later, show an important notice on
package installation about the importance of adding the new key_id
options to clients.conf on the Mandos server.

* debian/control (Package: mandos, Package: mandos-client): Depend on
                                                            debconf.
* debian/mandos-client.lintian-overrides: Override warnings.
* debian/mandos-client.postinst (create_keys): Show notice if new TLS
                                               key files were created.
* debian/mandos-client.templates: New.
* debian/mandos.lintian-overrides: Override warnings.
* debian/mandos.postinst (configure): If GnuTLS 3.6.6 or later is
                                      detected, show an important
                                      notice (once) about the new
                                      key_id option required in
                                      clients.conf.
* debian/mandos.templates: New.

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
# Update the initial RAM file system image
23
23
update_initramfs()
24
24
{
25
 
    if command -v update-initramfs >/dev/null; then
26
 
        update-initramfs -k all -u
27
 
    elif command -v dracut >/dev/null; then
28
 
        dracut_version="`dpkg-query --showformat='${Version}' --show dracut`"
29
 
        if dpkg --compare-versions "$dracut_version" lt 043-1 \
30
 
                && bash -c '. /etc/dracut.conf; . /etc/dracut.conf.d/*; [ "$hostonly" != yes ]'; then
31
 
            echo 'Dracut is not configured to use hostonly mode!' >&2
32
 
            return 1
33
 
        fi
34
 
        # Logic taken from dracut.postinst
35
 
        for kernel in /boot/vmlinu[xz]-*; do
36
 
            kversion="${kernel#/boot/vmlinu[xz]-}"
37
 
            # Dracut preserves old permissions of initramfs image
38
 
            # files, so we adjust permissions before creating new
39
 
            # initramfs image containing secret keys.
40
 
            chmod go-r /boot/initrd.img-"$kversion"
41
 
            if [ "$kversion" != "*" ]; then
42
 
                /etc/kernel/postinst.d/dracut "$kversion"
43
 
            fi
44
 
        done
45
 
    fi
 
25
    update-initramfs -u -k all
46
26
    
47
27
    if dpkg --compare-versions "$2" lt-nl "1.0.10-1"; then
48
28
        # Make old initrd.img files unreadable too, in case they were
83
63
        return 0
84
64
    fi
85
65
 
86
 
    # Remove any bad TLS keys by 1.8.0-1
87
 
    if dpkg --compare-versions "$2" eq "1.8.0-1" \
88
 
       || dpkg --compare-versions "$2" eq "1.8.0-1~bpo9+1"; then
89
 
        # Is the key bad?
90
 
        if ! certtool --password='' \
91
 
             --load-privkey=/etc/keys/mandos/tls-privkey.pem \
92
 
             --outfile=/dev/null --pubkey-info --no-text \
93
 
             2>/dev/null; then
94
 
            shred --remove -- /etc/keys/mandos/tls-privkey.pem \
95
 
                  2>/dev/null || :
96
 
            rm --force -- /etc/keys/mandos/tls-pubkey.pem
97
 
        fi
98
 
    fi
99
 
 
100
66
    # If the TLS keys already exists, do nothing
101
67
    if [ -r /etc/keys/mandos/tls-privkey.pem \
102
68
            -a -r /etc/keys/mandos/tls-pubkey.pem ]; then
103
69
        return 0
104
70
    fi
105
71
 
106
 
    # Try to create the TLS keys
107
 
 
108
 
    TLS_PRIVKEYTMP="`mktemp -t mandos-client-privkey.XXXXXXXXXX`"
109
 
 
110
 
    if certtool --generate-privkey --password='' \
111
 
                --outfile "$TLS_PRIVKEYTMP" --sec-param ultra \
112
 
                --key-type=ed25519 --pkcs8 --no-text 2>/dev/null; then
113
 
 
114
 
        local umask=$(umask)
115
 
        umask 077
116
 
        cp --archive "$TLS_PRIVKEYTMP" /etc/keys/mandos/tls-privkey.pem
117
 
        shred --remove -- "$TLS_PRIVKEYTMP" 2>/dev/null || :
118
 
 
119
 
        # First try certtool from GnuTLS
120
 
        if ! certtool --password='' \
121
 
             --load-privkey=/etc/keys/mandos/tls-privkey.pem \
122
 
             --outfile=/etc/keys/mandos/tls-pubkey.pem --pubkey-info \
123
 
             --no-text 2>/dev/null; then
124
 
            # Otherwise try OpenSSL
125
 
            if ! openssl pkey -in /etc/keys/mandos/tls-privkey.pem \
126
 
                 -out /etc/keys/mandos/tls-pubkey.pem -pubout; then
127
 
                rm --force /etc/keys/mandos/tls-pubkey.pem
128
 
                # None of the commands succeded; give up
129
 
                umask $umask
130
 
                return 1
131
 
            fi
132
 
        fi
133
 
        umask $umask
134
 
 
135
 
        key_id=$(mandos-keygen --passfile=/dev/null \
136
 
                     | grep --regexp="^key_id[ =]")
137
 
 
138
 
        db_version 2.0
139
 
        db_fset mandos-client/key_id seen false
140
 
        db_reset mandos-client/key_id
141
 
        db_subst mandos-client/key_id key_id $key_id
142
 
        db_input critical mandos-client/key_id || true
143
 
        db_go
144
 
        db_stop
145
 
    else
146
 
        shred --remove -- "$TLS_PRIVKEYTMP" 2>/dev/null || :
147
 
    fi
 
72
    # If this is an upgrade from an old installation, the TLS keys
 
73
    # will not exist; create them.
 
74
 
 
75
    # First try certtool from GnuTLS
 
76
    if ! certtool --generate-privkey --password='' \
 
77
         --outfile /etc/keys/mandos/tls-privkey.pem \
 
78
         --sec-param ultra --key-type=ed25519 --pkcs8 --no-text \
 
79
         2>/dev/null; then
 
80
        # Otherwise try OpenSSL
 
81
        if ! openssl genpkey -algorithm X25519 \
 
82
             -out /etc/keys/mandos/tls-privkey.pem; then
 
83
            rm --force /etc/keys/mandos/tls-privkey.pem
 
84
            # None of the commands succeded; give up
 
85
            return 1
 
86
        fi
 
87
    fi
 
88
 
 
89
    local umask=$(umask)
 
90
    umask 077
 
91
    # First try certtool from GnuTLS
 
92
    if ! certtool --password='' \
 
93
         --load-privkey=/etc/keys/mandos/tls-privkey.pem \
 
94
         --outfile=/etc/keys/mandos/tls-pubkey.pem --pubkey-info \
 
95
         --no-text 2>/dev/null; then
 
96
        # Otherwise try OpenSSL
 
97
        if ! openssl pkey -in /etc/keys/mandos/tls-privkey.pem \
 
98
             -out /etc/keys/mandos/tls-pubkey.pem -pubout; then
 
99
            rm --force /etc/keys/mandos/tls-pubkey.pem
 
100
            # None of the commands succeded; give up
 
101
            umask $umask
 
102
            return 1
 
103
        fi
 
104
    fi
 
105
    umask $umask
 
106
 
 
107
    key_id=$(mandos-keygen --passfile=/dev/null \
 
108
                 | grep --regexp="^key_id[ =]")
 
109
 
 
110
    db_version 2.0
 
111
    db_fset mandos-client/key_id seen false
 
112
    db_reset mandos-client/key_id
 
113
    db_subst mandos-client/key_id key_id $key_id
 
114
    db_input critical mandos-client/key_id || true
 
115
    db_go
 
116
    db_stop
148
117
}
149
118
 
150
119
create_dh_params(){