summaryrefslogtreecommitdiff
path: root/debian/local/update_tls.in
diff options
context:
space:
mode:
Diffstat (limited to 'debian/local/update_tls.in')
-rw-r--r--debian/local/update_tls.in305
1 files changed, 305 insertions, 0 deletions
diff --git a/debian/local/update_tls.in b/debian/local/update_tls.in
new file mode 100644
index 0000000..7d833fe
--- /dev/null
+++ b/debian/local/update_tls.in
@@ -0,0 +1,305 @@
+#!/bin/sh -e
+#-----------------------------------------------------------------------------
+#
+# $Sendmail: update_tls,v @sm_version@ @sm_date@ @sm_time@ cowboy Exp $
+#
+# Sendmail support for TLS
+#
+# Copyright (c) 2000-@SM_CPYRT@ Richard Nelson. All Rights Reserved.
+#
+# Notes:
+#
+#-----------------------------------------------------------------------------
+set -e;
+
+#------------------------------------------------------------------------------
+# Local variables
+#---------------------------------------------------------------------------
+HOSTNAME=`hostname -s`;
+DOMAINNAME=`hostname -d`;
+SSL_FQDN=`hostname -f`;
+SSL_EMAIL="admin@${SSL_FQDN}";
+export SSL_FQDN SSL_EMAIL;
+PROGRAM='sendmail';
+CERT_DIR="@sysconfdir@/ssl/certs";
+COM_PRM="@sysconfdir@/mail/tls/$PROGRAM-common.prm";
+COM_KEY="@sysconfdir@/mail/tls/$PROGRAM-common.key";
+MTA_CFG="@sysconfdir@/mail/tls/$PROGRAM-server.cfg";
+MTA_CSR="@sysconfdir@/mail/tls/$PROGRAM-server.csr";
+MTA_CRT="@sysconfdir@/mail/tls/$PROGRAM-server.crt";
+MSP_CFG="@sysconfdir@/mail/tls/$PROGRAM-client.cfg";
+MSP_CSR="@sysconfdir@/mail/tls/$PROGRAM-client.csr";
+MSP_CRT="@sysconfdir@/mail/tls/$PROGRAM-client.crt";
+NEW=0;
+REFD=0;
+
+#---------------------------------------------------------------------------
+# create_config: Function to create openssl configuration file
+#---------------------------------------------------------------------------
+create_config () {
+cat >$MTA_CFG <<EOT
+[ ca ]
+default_days = 365
+x509_extensions = X509v3
+[ req ]
+default_bits = 1024
+distinguished_name = req_DN
+[ req_DN ]
+countryName = "1. Country Name (2 letter code)"
+countryName_min = 2
+countryName_max = 2
+countryName_default =
+stateOrProvinceName = "2. State or Province Name (full name) "
+stateOrProvinceName_default =
+localityName = "3. Locality Name (eg, city) "
+localityName_default =
+0.organizationName = "4. Organization Name (eg, company) "
+0.organizationName_default = Sendmail
+organizationalUnitName = "5. Organizational Unit Name (eg, section) "
+organizationalUnitName_default = Sendmail Server
+commonName = "6. Common Name (MUST==FQDN) "
+commonName_max = 64
+commonName_default = \$ENV::SSL_FQDN
+emailAddress = "7. Email Address (eg, name@FQDN)"
+emailAddress_max = 40
+emailAddress_default = \$ENV::SSL_EMAIL
+[ x509v3 ]
+subjectAltName = email:copy
+issuerAltName = issuer:copy
+basicConstraints = CA:false
+nsComment = "Sendmail generated custom certificate"
+nsCertType = server
+nsSslServerName = \$ENV::SSL_FQDN
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid,issuer:always
+EOT
+};
+
+
+#---------------------------------------------------------------------------
+# Check if OpenSSL is installed
+if [ ! -d "$CERT_DIR" ]; then
+ cat <<-EOT
+
+ OpenSSL is not installed, will not configure sendmail support for it.
+
+ to install openssl, get openssl.
+
+ To enable sendmail TLS support at a later date, invoke "$0"
+
+ EOT
+ exit 0;
+ fi;
+
+echo ' ';
+echo 'Creating/Updating SSL(for TLS) information';
+
+
+#---------------------------------------------------------------------------
+# Process arguments
+#---------------------------------------------------------------------------
+case "$1" in
+ [Nn][Ee][Ww]*)
+ echo 'Removing any pre-existing sendmail certificates.';
+ if [ -x @bindir@/openssl ]; then
+ if [ -f $MTA_CRT ]; then
+ LINK="$CERT_DIR/"$(openssl x509 -noout -hash < $MTA_CRT)".0";
+ rm -f $LINK 2>/dev/null;
+ fi;
+ if [ -f $MSP_CRT ]; then
+ LINK="$CERT_DIR/"$(openssl x509 -noout -hash < $MSP_CRT)".0";
+ rm -f $LINK 2>/dev/null;
+ fi;
+ fi;
+ rm -f $MTA_CSR $MTA_CRT 2>/dev/null;
+ rm -f $MSP_CSR $MSP_CRT 2>/dev/null;
+ rm -f $COM_PRM $COM_KEY 2>/dev/null;
+ ;;
+ esac
+
+#---------------------------------------------------------------------------
+# Make sure sendmail.mc points to proper /etc/mail/tls/starttls.m4
+if [ -f @sysconfdir@/mail/sendmail.mc ]; then
+ if (grep -qEe "^[[:space:]]*include\(\`?@sysconfdir@/mail/starttls.m4" \
+ @sysconfdir@/mail/sendmail.mc); then
+ sed -e "s=^\([[:space:]]*\)\(\`\?\)include(\`\?@sysconfdir@/mail/starttls.m4'\?)\(dnl\)\?=\1\2include(\`@sysconfdir@/mail/tls/starttls.m4')dnl=g" \
+ @sysconfdir@/mail/sendmail.mc > @sysconfdir@/mail/sendmail.mc.new;
+ chown root:smmsp @sysconfdir@/mail/sendmail.mc.new;
+ chmod 0644 @sysconfdir@/mail/sendmail.mc.new;
+ mv @sysconfdir@/mail/sendmail.mc.new @sysconfdir@/mail/sendmail.mc;
+ fi;
+ fi;
+if [ -f @sysconfdir@/mail/submit.mc ]; then
+ if (grep -qEe "^[[:space:]]*include\(\`?@sysconfdir@/mail/starttls.m4" \
+ @sysconfdir@/mail/submit.mc); then
+ sed -e "s=^\([[:space:]]*\)\(\`\?\)include(\`\?@sysconfdir@/mail/starttls.m4'\?)\(dnl\)\?=\1\2include(\`@sysconfdir@/mail/tls/starttls.m4')dnl=g" \
+ @sysconfdir@/mail/submit.mc > @sysconfdir@/mail/submit.mc.new;
+ chown root:smmsp @sysconfdir@/mail/submit.mc.new;
+ chmod 0644 @sysconfdir@/mail/submit.mc.new;
+ mv @sysconfdir@/mail/submit.mc.new @sysconfdir@/mail/submit.mc;
+ fi;
+ fi;
+
+#---------------------------------------------------------------------------
+# check for references to starttls.m4 in sendmail.mc
+if [ -f @sysconfdir@/mail/sendmail.mc ]; then
+ if grep -qEe "^[[:space:]]*include\(\`?@sysconfdir@/mail/tls/starttls.m4" \
+ @sysconfdir@/mail/sendmail.mc; then
+ REFD=1;
+ fi;
+ fi;
+
+#---------------------------------------------------------------------------
+# Make sure prototype /etc/mail/tls/starttls.m4 exists
+if [ -L @sysconfdir@/mail/starttls.m4 ]; then
+ rm @sysconfdir@/mail/starttls.m4;
+ fi;
+if [ -f @sysconfdir@/mail/starttls.m4 ]; then
+ mv @sysconfdir@/mail/starttls.m4 @sysconfdir@/mail/tls/starttls.m4;
+ fi;
+if [ ! -f @sysconfdir@/mail/tls/starttls.m4 ]; then
+ NEW=1;
+ cp -a @datadir@/sendmail/cf/debian/starttls.m4 \
+ @sysconfdir@/mail/tls/starttls.m4;
+ echo ' ';
+ echo 'Created template file @sysconfdir@/mail/tls/starttls.m4';
+ echo 'Edit this file if you wish to change the default tls setup.';
+ fi;
+
+#---------------------------------------------------------------------------
+# check for SSL
+if [ -d "$CERT_DIR" ]; then
+ if [ -f $MTA_CRT -a -f $MSP_CRT ]; then
+ echo 'You already have sendmail certificates';
+ echo ' ';
+ chown root:smmsp $COM_KEY;
+ chown root:smmsp $MTA_CRT;
+ chown root:smmsp $MSP_CRT;
+ else
+ if [ -x @bindir@/openssl ]; then
+ yn="Y";
+ else
+ cat <<-EOT
+ $PROGRAM needs openssl (not installed) to create a
+ certificate to validate users
+
+ If you don't need a certificate, say No
+ If you want a certificate, install openssl and say Yes
+
+ Do you wish to create a certificate?
+ EOT
+ read yn;
+ yn=$(echo -n "$yn" | sed -e "s/^\ *//" -e "s/^\t*//");
+ test -n "$yn" || yn="N";
+ fi;
+
+ # Create new (self-signed) certificate
+ case "$yn" in
+ [Yy]*)
+ echo "Creating SSL certificates for sendmail.";
+ # Create prompt file
+ if [ ! -f @sysconfdir@/mail/tls/no_prompt ]; then
+ cat >@sysconfdir@/mail/tls/no_prompt <<-EOT
+
+
+
+
+
+
+
+ EOT
+ fi;
+
+ # Create config files
+ if [ ! -f $MTA_CFG ]; then
+ create_config;
+ chmod 0600 $MTA_CFG;
+ fi;
+ if [ ! -f $MSP_CFG ]; then
+ sed -e "s/Sendmail Server/Sendmail Client/" \
+ $MTA_CFG > $MSP_CFG;
+ chmod 0600 $MSP_CFG;
+ fi;
+ # Create shared DSA/DH password parameters
+ # Skip this for now...
+ if [ ! -f $COM_PRM ]; then
+ #openssl dsaparam 1024 -out $COM_PRM;
+ #openssl dhparam -dsaparam -in $COM_PRM >> $COM_PRM;
+ touch $COM_PRM;
+ chmod 0600 $COM_PRM;
+ fi;
+ # Create shared DSA/RSA key (RSA preferred for browser support)
+ if [ ! -f $COM_KEY ]; then
+ openssl genrsa -out $COM_KEY 1024;
+ #openssl gendsa -out $COM_KEY $COM_PRM;
+ chown root:smmsp $COM_KEY;
+ chmod 0640 $COM_KEY;
+ fi;
+ # sendmail requires that CN=fqdn
+ # Prompts: 1) Country Name (2 letter code)
+ # 2) State or Province Name
+ # 3) Locality Name (eg, city)
+ # 4) Organization Name (eg, company)
+ # 5) Organizational Unit Name (eg, section)
+ # 6) Common Name (eg, YOUR name)
+ # 7) Email Address
+ if [ ! -f $MTA_CRT ]; then
+ openssl req -new -config $MTA_CFG -key $COM_KEY \
+ -out $MTA_CSR \
+ <@sysconfdir@/mail/tls/no_prompt >/dev/null 2>&1;
+ chmod 0600 $MTA_CSR;
+ openssl x509 -req -extfile $MTA_CFG \
+ -signkey $COM_KEY -in $MTA_CSR \
+ -out $MTA_CRT -days 365 \
+ >/dev/null 2>&1;
+ chown root:smmsp $MTA_CRT;
+ chmod 0644 $MTA_CRT;
+ fi;
+ if [ ! -f $MSP_CRT ]; then
+ openssl req -new -config $MSP_CFG -key $COM_KEY \
+ -out $MSP_CSR \
+ <@sysconfdir@/mail/tls/no_prompt >/dev/null 2>&1;
+ chmod 0600 $MSP_CSR;
+ openssl x509 -req -extfile $MSP_CFG \
+ -signkey $COM_KEY -in $MSP_CSR \
+ -out $MSP_CRT -days 365 \
+ >/dev/null 2>&1;
+ chown root:smmsp $MSP_CRT;
+ chmod 0644 $MSP_CRT;
+ fi;
+ esac;
+ fi;
+
+ # Create hash link for new certificate (must do msp last!)
+ if [ -f $MTA_CRT ]; then
+ LINK="$CERT_DIR/"$(openssl x509 -noout -hash < $MTA_CRT)".0";
+ if [ ! -f $LINK ]; then
+ ln -sf $MTA_CRT $LINK;
+ fi;
+ fi;
+ if [ -f $MSP_CRT ]; then
+ LINK="$CERT_DIR/"$(openssl x509 -noout -hash < $MSP_CRT)".0";
+ if [ ! -f $LINK ]; then
+ ln -sf $MSP_CRT $LINK;
+ fi;
+ fi;
+ fi;
+
+if [ $REFD -eq 0 ]; then
+ cat <<-EOT
+
+ *** *** *** WARNING *** WARNING *** WARNING *** WARNING *** *** ***
+
+ Everything you need to support STARTTLS (encrypted mail transmission
+ and user authentication via certificates) is installed and configured
+ but *IS* not being used.
+
+ To enable sendmail to use STARTTLS, you need to:
+ 1) Add this line to @sysconfdir@/mail/sendmail.mc and optionally
+ to @sysconfdir@/mail/submit.mc:
+ include(\`@sysconfdir@/mail/tls/starttls.m4')dnl
+ 2) Run sendmailconfig
+ 3) Restart sendmail
+
+ EOT
+ fi;