Implement docker-compose setup for CAcert software
This commit is contained in:
		
						commit
						279dbcffbf
					
				
					 17 changed files with 642 additions and 0 deletions
				
			
		
							
								
								
									
										1
									
								
								.dockerignore
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.dockerignore
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | .env | ||||||
							
								
								
									
										6
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | ||||||
|  | .idea/ | ||||||
|  | cacert-cats/ | ||||||
|  | cacert-mgr/ | ||||||
|  | cacert-software/ | ||||||
|  | .env | ||||||
|  | testca/ | ||||||
							
								
								
									
										8
									
								
								.mrconfig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								.mrconfig
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | ||||||
|  | [cacert-cats] | ||||||
|  | checkout = git clone https://github.com/CAcertOrg/cats cacert-cats | ||||||
|  | 
 | ||||||
|  | [cacert-mgr] | ||||||
|  | checkout = git clone git+ssh://git.cacert.org/srv/git/cacert-mgr.git cacert-mgr | ||||||
|  | 
 | ||||||
|  | [cacert-software] | ||||||
|  | checkout = git clone git+ssh://git.cacert.org/srv/git/cacert-devel.git cacert-software | ||||||
							
								
								
									
										56
									
								
								application.Dockerfile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								application.Dockerfile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,56 @@ | ||||||
|  | FROM debian:jessie | ||||||
|  | 
 | ||||||
|  | RUN apt-get update \ | ||||||
|  |     && DEBIAN_FRONTEND=noninteractive \ | ||||||
|  |     apt-get install -y --no-install-recommends \ | ||||||
|  |     ca-certificates \ | ||||||
|  |     curl \ | ||||||
|  |     libapache2-mod-php5 \ | ||||||
|  |     locales-all \ | ||||||
|  |     mariadb-client \ | ||||||
|  |     nullmailer \ | ||||||
|  |     php-apc \ | ||||||
|  |     php-mail \ | ||||||
|  |     php-mail-mime \ | ||||||
|  |     php-mail-mimedecode \ | ||||||
|  |     php-net-smtp \ | ||||||
|  |     php-net-socket \ | ||||||
|  |     php5-apcu \ | ||||||
|  |     php5-curl \ | ||||||
|  |     php5-gd \ | ||||||
|  |     php5-imagick \ | ||||||
|  |     php5-imap \ | ||||||
|  |     php5-json \ | ||||||
|  |     php5-mcrypt \ | ||||||
|  |     php5-mysql \ | ||||||
|  |     php5-pspell \ | ||||||
|  |     php5-recode \ | ||||||
|  |     psmisc \ | ||||||
|  |     wamerican \ | ||||||
|  |     && apt-get clean \ | ||||||
|  |     && rm -rf /var/lib/apt/lists/* | ||||||
|  | 
 | ||||||
|  | STOPSIGNAL SIGWINCH | ||||||
|  | 
 | ||||||
|  | COPY docker/apache-foreground /usr/local/bin/ | ||||||
|  | COPY testca/ /usr/local/etc/testca/ | ||||||
|  | COPY docker/mysql.php /usr/local/etc/application/mysql.php | ||||||
|  | COPY docker/apache-virtualhost.conf /etc/apache2/sites-available/ | ||||||
|  | COPY docker/cacert.conf /etc/apache2/conf-available/ | ||||||
|  | COPY docker/php5-cacert.ini /etc/php5/mods-available/cacert.ini | ||||||
|  | COPY docker/feed.rss /usr/local/etc/application/feed.rss | ||||||
|  | 
 | ||||||
|  | VOLUME /www | ||||||
|  | 
 | ||||||
|  | RUN a2ensite apache-virtualhost ; \ | ||||||
|  |     a2dissite 000-default ; \ | ||||||
|  |     a2enconf cacert ; \ | ||||||
|  |     a2enmod headers ; \ | ||||||
|  |     a2enmod rewrite ; \ | ||||||
|  |     a2enmod ssl ; \ | ||||||
|  |     ln -s /etc/php5/mods-available/cacert.ini /etc/php5/apache2/conf.d/20-cacert.ini | ||||||
|  | 
 | ||||||
|  | EXPOSE 80 | ||||||
|  | EXPOSE 443 | ||||||
|  | 
 | ||||||
|  | CMD ["/usr/local/bin/apache-foreground"] | ||||||
							
								
								
									
										39
									
								
								docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,39 @@ | ||||||
|  | --- | ||||||
|  | version: "3.8" | ||||||
|  | services: | ||||||
|  |   db: | ||||||
|  |     build: | ||||||
|  |       context: . | ||||||
|  |       dockerfile: mariadb.Dockerfile | ||||||
|  |     env_file: | ||||||
|  |       - ./.env | ||||||
|  |     volumes: | ||||||
|  |       - db:/var/lib/mysql | ||||||
|  |     ports: | ||||||
|  |       - "13306:3306" | ||||||
|  |     healthcheck: | ||||||
|  |       test: out=$$(mysqladmin ping -h localhost -P 3306 -u root -p$$MYSQL_ROOT_PASSWORD 2>&1); echo $$out | grep 'mysqld is alive' || { echo $$out ; exit 1 ; } | ||||||
|  |   smtp: | ||||||
|  |     build: | ||||||
|  |       context: . | ||||||
|  |       dockerfile: smtp.Dockerfile | ||||||
|  |     volumes: | ||||||
|  |       - maildir:/home/catchall/Maildir | ||||||
|  |   application: | ||||||
|  |     build: | ||||||
|  |       context: . | ||||||
|  |       dockerfile: application.Dockerfile | ||||||
|  |     env_file: | ||||||
|  |       - ./.env | ||||||
|  |     ports: | ||||||
|  |       - "8080:80" | ||||||
|  |       - "8443:443" | ||||||
|  |     depends_on: | ||||||
|  |       - db | ||||||
|  |       - smtp | ||||||
|  |     volumes: | ||||||
|  |       - ./cacert-software:/www | ||||||
|  | 
 | ||||||
|  | volumes: | ||||||
|  |   db: { } | ||||||
|  |   maildir: { } | ||||||
							
								
								
									
										27
									
								
								docker/apache-foreground
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										27
									
								
								docker/apache-foreground
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,27 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | set -eux | ||||||
|  | 
 | ||||||
|  | # Apache gets grumpy about PID files pre-existing | ||||||
|  | rm -f /run/apache2/apache2.pid | ||||||
|  | 
 | ||||||
|  | cp /usr/local/etc/testca/certs/test.cacert.org.crt.pem /etc/ssl/certs/test.cacert.org.crt | ||||||
|  | cp /usr/local/etc/testca/certs/test.cacert.org.key.pem /etc/ssl/private/test.cacert.org.pem | ||||||
|  | ( | ||||||
|  |   openssl x509 -in /usr/local/etc/testca/class3/ca.crt.pem | ||||||
|  |   openssl x509 -in /usr/local/etc/testca/root/ca.crt.pem | ||||||
|  | ) >/etc/ssl/certs/combined.crt | ||||||
|  | 
 | ||||||
|  | cp /usr/local/etc/testca/certs/secure.test.cacert.org.crt.pem /etc/ssl/certs/secure.crt | ||||||
|  | cp /usr/local/etc/testca/certs/secure.test.cacert.org.key.pem /etc/ssl/private/secure_test_cacert_org.pem | ||||||
|  | 
 | ||||||
|  | sed -i "s/@MYSQL_USERNAME@/$MYSQL_APP_USER/g; s/@MYSQL_PASSWORD@/$MYSQL_APP_PASSWORD/g" \ | ||||||
|  |   /usr/local/etc/application/mysql.php | ||||||
|  | if [ ! -f /www/includes/mysql.php ]; then | ||||||
|  |   rm -f /www/includes/mysql.php | ||||||
|  |   cp /usr/local/etc/application/mysql.php /www/includes/mysql.php | ||||||
|  | fi | ||||||
|  | cp /usr/local/etc/application/feed.rss /www/pages/index/feed.rss | ||||||
|  | 
 | ||||||
|  | apache2ctl start "$@" | ||||||
|  | 
 | ||||||
|  | exec tail -F --follow=name --retry /var/log/apache2/error.log /var/log/apache2/phperror.log | ||||||
							
								
								
									
										74
									
								
								docker/apache-virtualhost.conf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								docker/apache-virtualhost.conf
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,74 @@ | ||||||
|  | <VirtualHost *:80> | ||||||
|  |   ServerName test.cacert.org | ||||||
|  |   ServerAlias www.test.cacert.org | ||||||
|  |   DocumentRoot /www/www | ||||||
|  | 
 | ||||||
|  |   ScriptAlias /cgi-bin/ /www/cgi-bin/ | ||||||
|  |   Redirect permanent /revoke.crl        http://crl.cacert.org/revoke.crl | ||||||
|  |   Redirect permanent /class3-revoke.crl http://crl.cacert.org/class3-revoke.crl | ||||||
|  |   RewriteEngine On | ||||||
|  |   RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) | ||||||
|  |   RewriteRule .* - [F] | ||||||
|  |   <Directory /www/www/policy> | ||||||
|  |     AddDefaultCharset utf-8 | ||||||
|  |   </Directory> | ||||||
|  | </VirtualHost> | ||||||
|  | 
 | ||||||
|  | <VirtualHost *:443> | ||||||
|  |   ServerName test.cacert.org | ||||||
|  |   ServerAlias www.test.cacert.org | ||||||
|  |   DocumentRoot /www/www | ||||||
|  | 
 | ||||||
|  |   SSLEngine on | ||||||
|  |   SSLStrictSNIVHostCheck on | ||||||
|  |   SSLProtocol all -SSLv2 -SSLv3 | ||||||
|  |   SSLHonorCipherOrder on | ||||||
|  |   SSLCipherSuite kEECDH:kEDH:AESGCM:ALL:!3DES!RC4:!LOW:!EXP:!MD5:!aNULL:!eNULL | ||||||
|  |   SSLCertificateFile /etc/ssl/certs/test.cacert.org.crt | ||||||
|  |   SSLCertificateKeyFile /etc/ssl/private/test.cacert.org.pem | ||||||
|  |   SSLCACertificateFile /etc/ssl/certs/combined.crt | ||||||
|  | 
 | ||||||
|  |   Header always set Strict-Transport-Security "max-age=31536000" | ||||||
|  | 
 | ||||||
|  |   ScriptAlias /cgi-bin/ /www/cgi-bin/ | ||||||
|  |   Redirect permanent /revoke.crl        http://crl.cacert.org/revoke.crl | ||||||
|  |   Redirect permanent /class3-revoke.crl http://crl.cacert.org/class3-revoke.crl | ||||||
|  |   RewriteEngine On | ||||||
|  |   RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) | ||||||
|  |   RewriteRule .* - [F] | ||||||
|  |   <Directory /www/www/policy> | ||||||
|  |     AddDefaultCharset utf-8 | ||||||
|  |   </Directory> | ||||||
|  | </VirtualHost> | ||||||
|  | 
 | ||||||
|  | <VirtualHost *:443> | ||||||
|  |   ServerName secure.test.cacert.org | ||||||
|  |   ServerAlias secure.test.cacert.org | ||||||
|  |   DocumentRoot /www/www | ||||||
|  | 
 | ||||||
|  |   SSLEngine on | ||||||
|  |   SSLStrictSNIVHostCheck on | ||||||
|  |   SSLProtocol all -SSLv2 -SSLv3 | ||||||
|  |   SSLHonorCipherOrder on | ||||||
|  |   SSLCipherSuite kEECDH:kEDH:AESGCM:ALL:!3DES!RC4:!LOW:!EXP:!MD5:!aNULL:!eNULL | ||||||
|  |   SSLCertificateFile /etc/ssl/certs/secure.crt | ||||||
|  |   SSLCertificateKeyFile /etc/ssl/private/secure_test_cacert_org.pem | ||||||
|  |   SSLVerifyClient require | ||||||
|  |   SSLVerifyDepth 2 | ||||||
|  |   SSLCACertificateFile /etc/ssl/certs/combined.crt | ||||||
|  |   #SSLCARevocationFile /etc/ssl/crls/cacert-combined.crl | ||||||
|  |   #SSLOCSPEnable on | ||||||
|  |   #SSLOCSPDefaultResponder http://ocsp.cacert.org/ | ||||||
|  |   SSLOptions +StdEnvVars | ||||||
|  | 
 | ||||||
|  |   Header always set Strict-Transport-Security "max-age=31536000" | ||||||
|  | 
 | ||||||
|  |   Redirect permanent /revoke.crl        http://crl.cacert.org/revoke.crl | ||||||
|  |   Redirect permanent /class3-revoke.crl http://crl.cacert.org/class3-revoke.crl | ||||||
|  |   RewriteEngine On | ||||||
|  |   RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) | ||||||
|  |   RewriteRule .* - [F] | ||||||
|  |   <Directory /www/www/policy> | ||||||
|  |     AddDefaultCharset utf-8 | ||||||
|  |   </Directory> | ||||||
|  | </VirtualHost> | ||||||
							
								
								
									
										55
									
								
								docker/cacert.conf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								docker/cacert.conf
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,55 @@ | ||||||
|  | # customized settings for CAcert webserver | ||||||
|  | 
 | ||||||
|  | MaxRequestsPerChild	100 | ||||||
|  | 
 | ||||||
|  | ServerAdmin	support@cacert.org | ||||||
|  | ServerName	cacert.org | ||||||
|  | 
 | ||||||
|  | Header always set X-Frame-Options "DENY" | ||||||
|  | Header always set X-XSS-Protection "1; mode=block" | ||||||
|  | Header always set X-Content-Type-Options "nosniff" | ||||||
|  | 
 | ||||||
|  | DocumentRoot /www/www | ||||||
|  | 
 | ||||||
|  | <Directory /> | ||||||
|  |     Options -Indexes +Includes +FollowSymLinks | ||||||
|  |     AllowOverride None | ||||||
|  | </Directory> | ||||||
|  | 
 | ||||||
|  | <Directory /www/www> | ||||||
|  |     Options -Indexes +Includes +FollowSymLinks | ||||||
|  |     AllowOverride All | ||||||
|  |     Require all granted | ||||||
|  | </Directory> | ||||||
|  | 
 | ||||||
|  | <Directory /www/www/docs> | ||||||
|  |     Options +Indexes +Includes +FollowSymLinks +MultiViews | ||||||
|  |     AllowOverride None | ||||||
|  | </Directory> | ||||||
|  | 
 | ||||||
|  | <Directory /www/stamp> | ||||||
|  |     Options -Indexes +Includes +FollowSymLinks | ||||||
|  |     AllowOverride All | ||||||
|  |     Require all granted | ||||||
|  | </Directory> | ||||||
|  | 
 | ||||||
|  | UseCanonicalName	off | ||||||
|  | HostnameLookups		on | ||||||
|  | 
 | ||||||
|  | LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" mod_gzip: %{mod_gzip_compression_ratio}npct. %T %v" full | ||||||
|  | 
 | ||||||
|  | CustomLog /var/log/apache2/access.log full | ||||||
|  | 
 | ||||||
|  | ServerSignature	off | ||||||
|  | 
 | ||||||
|  | AddDefaultCharset on | ||||||
|  | 
 | ||||||
|  | <IfModule mod_ssl.c> | ||||||
|  | 	# OCSP Stapling, only in httpd 2.3.3 and later | ||||||
|  | 	SSLUseStapling                          on | ||||||
|  | 	SSLStaplingResponderTimeout             5 | ||||||
|  | 	SSLStaplingReturnResponderErrors        off | ||||||
|  | 	SSLStaplingCache                        shmcb:${APACHE_RUN_DIR}/ocsp(1280000) | ||||||
|  | 	SSLStaplingFakeTryLater                 off | ||||||
|  | 	SSLStaplingStandardCacheTimeout         86400 | ||||||
|  | </IfModule> | ||||||
							
								
								
									
										18
									
								
								docker/feed.rss
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								docker/feed.rss
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,18 @@ | ||||||
|  | <?xml version="1.0" encoding="UTF-8"?><!-- generator="WordPress/2.5.1" --> | ||||||
|  | <rss version="0.92"> | ||||||
|  |         <channel> | ||||||
|  |                 <title>CAcert NEWS Blog</title> | ||||||
|  |                 <link>http://blog.cacert.org</link> | ||||||
|  |                 <description>CAcert NEWS and up coming events.</description> | ||||||
|  |                 <lastBuildDate>Fri, 20 Aug 2010 11:54:30 +0000</lastBuildDate> | ||||||
|  |                 <docs>http://backend.userland.com/rss092</docs> | ||||||
|  |                 <language>en</language> | ||||||
|  | 
 | ||||||
|  |                 <item> | ||||||
|  |                         <title>Looking for confirmation email on creating account?</title> | ||||||
|  |                         <description>Please go to https://ca-mgr1.it-sls.de/login login with your just created account and password. Under MAIL you'll find your individual confirmation email. | ||||||
|  |                         </description> | ||||||
|  |                         <link>https://ca-mgr1.it-sls.de/testsystemdoc.html</link> | ||||||
|  |                 </item> | ||||||
|  |         </channel> | ||||||
|  | </rss> | ||||||
							
								
								
									
										14
									
								
								docker/initdb.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								docker/initdb.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,14 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | 
 | ||||||
|  | set -eux | ||||||
|  | 
 | ||||||
|  | mysql -h localhost -u root "-p$MYSQL_ROOT_PASSWORD" <<-EOF | ||||||
|  | CREATE database cacert CHARSET latin1 COLLATE latin1_swedish_ci; | ||||||
|  | CREATE USER $MYSQL_APP_USER@'%' IDENTIFIED BY '$MYSQL_APP_PASSWORD'; | ||||||
|  | GRANT CREATE TEMPORARY TABLES ON cacert.* TO $MYSQL_APP_USER@'%'; | ||||||
|  | GRANT SELECT, INSERT, UPDATE, DELETE ON cacert.* TO $MYSQL_APP_USER@'%'; | ||||||
|  | EOF | ||||||
|  | 
 | ||||||
|  | for script in /db_migrations/*.sh; do | ||||||
|  |   sh "$script" -h localhost -u root "-p$MYSQL_ROOT_PASSWORD" cacert | ||||||
|  | done | ||||||
							
								
								
									
										114
									
								
								docker/mysql.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								docker/mysql.php
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,114 @@ | ||||||
|  | <? /* | ||||||
|  |     LibreSSL - CAcert web application | ||||||
|  |     Copyright (C) 2004-2008  CAcert Inc. | ||||||
|  | 
 | ||||||
|  |     This program is free software; you can redistribute it and/or modify | ||||||
|  |     it under the terms of the GNU General Public License as published by | ||||||
|  |     the Free Software Foundation; version 2 of the License. | ||||||
|  | 
 | ||||||
|  |     This program is distributed in the hope that it will be useful, | ||||||
|  |     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |     GNU General Public License for more details. | ||||||
|  | 
 | ||||||
|  |     You should have received a copy of the GNU General Public License | ||||||
|  |     along with this program; if not, write to the Free Software | ||||||
|  |     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | $_SESSION['mconn'] = mysql_connect("db", "@MYSQL_USERNAME@", "@MYSQL_PASSWORD@"); | ||||||
|  | if ($_SESSION['mconn'] != FALSE) | ||||||
|  | { | ||||||
|  |     mysql_select_db("cacert"); | ||||||
|  |     $_SESSION['mconn'] = TRUE; | ||||||
|  | } | ||||||
|  | $_SESSION['_config']['normalhostname'] = "test.cacert.org:8443"; | ||||||
|  | $_SESSION['_config']['securehostname'] = "secure.test.cacert.org:8443"; | ||||||
|  | $_SESSION['_config']['tverify'] = "tverify.cacert.org"; | ||||||
|  | 
 | ||||||
|  | function sendmail($to, $subject, $message, $from, $replyto = "", $toname = "", $fromname = "", $errorsto = "returns@cacert.org", $use_utf8 = true) | ||||||
|  | { | ||||||
|  |     $lines = explode("\n", $message); | ||||||
|  |     $message = ""; | ||||||
|  |     foreach($lines as $line) | ||||||
|  |     { | ||||||
|  |         $line = trim($line); | ||||||
|  |         if($line == ".") | ||||||
|  |             $message .= " .\n"; | ||||||
|  |         else | ||||||
|  |             $message .= $line."\n"; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if($fromname == "") | ||||||
|  |         $fromname = $from; | ||||||
|  | 
 | ||||||
|  |     $bits = explode(",", $from); | ||||||
|  |     $from = addslashes($bits['0']); | ||||||
|  |     $fromname = addslashes($fromname); | ||||||
|  | 
 | ||||||
|  |     $smtp = fsockopen("smtp", 25); | ||||||
|  |     if(!$smtp) | ||||||
|  |     { | ||||||
|  |         echo("Could not connect to mailserver at localhost:25\n"); | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  |     $InputBuffer = fgets($smtp, 1024); | ||||||
|  |     fputs($smtp, "EHLO test.cacert.org\r\n"); | ||||||
|  |     $InputBuffer = fgets($smtp, 1024); | ||||||
|  |     fputs($smtp, "MAIL FROM:<returns@cacert.org>\r\n"); | ||||||
|  |     $InputBuffer = fgets($smtp, 1024); | ||||||
|  |     $bits = explode(",", $to); | ||||||
|  |     foreach($bits as $user) | ||||||
|  |         fputs($smtp, "RCPT TO:<".trim($user).">\r\n"); | ||||||
|  |     $InputBuffer = fgets($smtp, 1024); | ||||||
|  |     fputs($smtp, "DATA\r\n"); | ||||||
|  |     $InputBuffer = fgets($smtp, 1024); | ||||||
|  |     fputs($smtp, "X-Mailer: CAcert.org Website\r\n"); | ||||||
|  |     if (array_key_exists("REMOTE_ADDR", $_SERVER)) | ||||||
|  |         fputs($smtp, "X-OriginatingIP: ".$_SERVER["REMOTE_ADDR"]."\r\n"); | ||||||
|  |     fputs($smtp, "Sender: $errorsto\r\n"); | ||||||
|  |     fputs($smtp, "Errors-To: $errorsto\r\n"); | ||||||
|  |     if($replyto != "") | ||||||
|  |         fputs($smtp, "Reply-To: $replyto\r\n"); | ||||||
|  |     else | ||||||
|  |         fputs($smtp, "Reply-To: $from\r\n"); | ||||||
|  |     fputs($smtp, "From: $from\r\n"); | ||||||
|  |     fputs($smtp, "To: $to\r\n"); | ||||||
|  |     if(preg_match("/[^a-zA-Z0-9 .-\[\]!_@]/",$subject)) | ||||||
|  |     { | ||||||
|  |         fputs($smtp, "Subject: =?utf-8?B?".base64_encode(recode("html..utf-8", $subject))."?=\r\n"); | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         fputs($smtp, "Subject: $subject\r\n"); | ||||||
|  |     } | ||||||
|  |     fputs($smtp, "Mime-Version: 1.0\r\n"); | ||||||
|  |     if($use_utf8) | ||||||
|  |     { | ||||||
|  |         fputs($smtp, "Content-Type: text/plain; charset=\"utf-8\"\r\n"); | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         fputs($smtp, "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n"); | ||||||
|  |     } | ||||||
|  |     fputs($smtp, "Content-Transfer-Encoding: quoted-printable\r\n"); | ||||||
|  |     fputs($smtp, "Content-Disposition: inline\r\n"); | ||||||
|  | 
 | ||||||
|  | //		fputs($smtp, "Content-Transfer-Encoding: BASE64\r\n");
 | ||||||
|  |     fputs($smtp, "\r\n"); | ||||||
|  | //		fputs($smtp, chunk_split(base64_encode(recode("html..utf-8", $message)))."\r\n.\r\n");
 | ||||||
|  |     $encoded_lines = explode( "\n", str_replace("\r", "", $message) ); | ||||||
|  |     array_walk( $encoded_lines, | ||||||
|  |         function (&$a) { | ||||||
|  |             $a = quoted_printable_encode(recode("html..utf-8", $a)); | ||||||
|  |         }); | ||||||
|  |     $encoded_message = implode("\n", $encoded_lines); | ||||||
|  | 
 | ||||||
|  |     $encoded_message = str_replace("\r.", "\r=2E", $encoded_message); | ||||||
|  |     $encoded_message = str_replace("\n.", "\n=2E", $encoded_message); | ||||||
|  |     fputs($smtp, $encoded_message); | ||||||
|  |     fputs($smtp, "\r\n.\r\n"); | ||||||
|  |     fputs($smtp, "QUIT\n"); | ||||||
|  |     $InputBuffer = fgets($smtp, 1024); | ||||||
|  |     fclose($smtp); | ||||||
|  | } | ||||||
							
								
								
									
										20
									
								
								docker/php5-cacert.ini
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								docker/php5-cacert.ini
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | ||||||
|  | ; | ||||||
|  | ; Additional settings for CAcert webdb application | ||||||
|  | ; | ||||||
|  | safe_mode_allowed_env_vars = LC_ALL,LANG,LANGUAGE,PHP_ | ||||||
|  | disable_functions = passthru | ||||||
|  | expose_php = Off | ||||||
|  | memory_limit = 18M | ||||||
|  | display_errors = Off | ||||||
|  | log_errors = On | ||||||
|  | error_log = /var/log/apache2/phperrors.log | ||||||
|  | sendmail_path = "/usr/sbin/sendmail -t -i -freturns@cacert.org" | ||||||
|  | session.use_only_cookies = On | ||||||
|  | session.cookie_secure = On | ||||||
|  | error_reporting = E_ALL | ||||||
|  | short_open_tag = On | ||||||
|  | 
 | ||||||
|  | ; Starting with PHP 5.6, PHP's default character set is set to UTF-8. | ||||||
|  | ; This is not what the current CAcert application code expects, so we | ||||||
|  | ; overrrule it with the earlier default. | ||||||
|  | default_charset = "iso-8859-1" | ||||||
							
								
								
									
										7
									
								
								docker/run-postfix
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								docker/run-postfix
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,7 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | set -eu | ||||||
|  | 
 | ||||||
|  | mkdir -p /home/catchall/Maildir/tmp /home/catchall/Maildir/new /home/catchall/Maildir/cur | ||||||
|  | chown -Rc catchall.catchall /home/catchall/Maildir | ||||||
|  | 
 | ||||||
|  | postfix start-fg | ||||||
							
								
								
									
										15
									
								
								imap.Dockerfile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								imap.Dockerfile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | ||||||
|  | FROM debian:buster | ||||||
|  | 
 | ||||||
|  | RUN apt-get update \ | ||||||
|  |     && DEBIAN_FRONTEND=noninteractive \ | ||||||
|  |     apt-get install -y --no-install-recommends \ | ||||||
|  |     ca-certificates \ | ||||||
|  |     curl \ | ||||||
|  |     dovecot-imapd \ | ||||||
|  |     psmisc \ | ||||||
|  |     && apt-get clean \ | ||||||
|  |     && rm -rf /var/lib/apt/lists/* | ||||||
|  | 
 | ||||||
|  | EXPOSE 25 | ||||||
|  | 
 | ||||||
|  | COPY docker/start-postfix.sh /usr/local | ||||||
							
								
								
									
										4
									
								
								mariadb.Dockerfile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mariadb.Dockerfile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | ||||||
|  | FROM mariadb:focal | ||||||
|  | 
 | ||||||
|  | COPY docker/initdb.sh /docker-entrypoint-initdb.d/initdb.sh | ||||||
|  | COPY cacert-software/scripts/db_migrations/*.sh /db_migrations/ | ||||||
							
								
								
									
										155
									
								
								setup_test_ca.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										155
									
								
								setup_test_ca.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,155 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | 
 | ||||||
|  | set -eux | ||||||
|  | 
 | ||||||
|  | if [ -d testca/ ]; then | ||||||
|  |   echo "testca/ exists, remove it if you want to start from scratch" | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | ORGANIZATION="CAcert Inc." | ||||||
|  | COUNTRY_CODE="AU" | ||||||
|  | 
 | ||||||
|  | mkdir -p testca/ | ||||||
|  | cd testca | ||||||
|  | mkdir -p root/newcerts class3/newcerts root/private class3/private certs | ||||||
|  | touch root/index.txt class3/index.txt | ||||||
|  | cat >ca.cnf <<EOF | ||||||
|  | [ca] | ||||||
|  | default_ca             = class3_ca | ||||||
|  | 
 | ||||||
|  | [root_ca] | ||||||
|  | dir                    = ./root | ||||||
|  | certs                  = \$dir/certs | ||||||
|  | crl_dir                = \$dir/crl | ||||||
|  | database               = \$dir/index.txt | ||||||
|  | serial                 = \$dir/serial | ||||||
|  | new_certs_dir          = \$dir/newcerts | ||||||
|  | 
 | ||||||
|  | crl                    = \$dir/crl.pem | ||||||
|  | certificate            = \$dir/ca.crt.pem | ||||||
|  | private_key            = \$dir/private/ca.key.pem | ||||||
|  | RANDFILE               = \$dir/private/.rand | ||||||
|  | 
 | ||||||
|  | policy                 = policy_any | ||||||
|  | unique_subject         = no | ||||||
|  | email_in_dn            = no | ||||||
|  | copy_extensions        = none | ||||||
|  | 
 | ||||||
|  | default_md             = sha256 | ||||||
|  | default_days           = 1825 | ||||||
|  | default_crl_days       = 30 | ||||||
|  | 
 | ||||||
|  | extensions             = intermediary_extensions | ||||||
|  | 
 | ||||||
|  | [class3_ca] | ||||||
|  | dir                    = ./class3 | ||||||
|  | certs                  = \$dir/certs | ||||||
|  | crl_dir                = \$dir/crl | ||||||
|  | database               = \$dir/index.txt | ||||||
|  | serial                 = \$dir/serial | ||||||
|  | new_certs_dir          = \$dir/newcerts | ||||||
|  | 
 | ||||||
|  | crl                    = \$dir/crl.pem | ||||||
|  | certificate            = \$dir/ca.crt.pem | ||||||
|  | private_key            = \$dir/private/ca.key.pem | ||||||
|  | RANDFILE               = \$dir/private/.rand | ||||||
|  | 
 | ||||||
|  | policy                 = policy_any | ||||||
|  | unique_subject         = no | ||||||
|  | email_in_dn            = no | ||||||
|  | copy_extensions        = copy | ||||||
|  | 
 | ||||||
|  | default_md             = sha256 | ||||||
|  | default_days           = 365 | ||||||
|  | default_crl_days       = 30 | ||||||
|  | 
 | ||||||
|  | extensions             = class3_extensions | ||||||
|  | 
 | ||||||
|  | [policy_any] | ||||||
|  | countryName            = optional | ||||||
|  | stateOrProvinceName    = optional | ||||||
|  | organizationName       = optional | ||||||
|  | organizationalUnitName = optional | ||||||
|  | commonName             = supplied | ||||||
|  | emailAddress           = optional | ||||||
|  | 
 | ||||||
|  | [req] | ||||||
|  | default_bits           = 3072 | ||||||
|  | prompt                 = no | ||||||
|  | utf8                   = yes | ||||||
|  | distinguished_name     = req_distinguished_name | ||||||
|  | 
 | ||||||
|  | [req_distinguished_name] | ||||||
|  | countryName            = AU | ||||||
|  | organizationName       = CAcert Inc. | ||||||
|  | organizationalUnitName = Software Testing | ||||||
|  | 
 | ||||||
|  | [root_extensions] | ||||||
|  | basicConstraints       = critical,CA:true | ||||||
|  | keyUsage               = critical,keyCertSign,cRLSign | ||||||
|  | subjectKeyIdentifier   = hash | ||||||
|  | 
 | ||||||
|  | [class3_extensions] | ||||||
|  | basicConstraints       = critical,CA:true,pathlen:0 | ||||||
|  | keyUsage               = critical,keyCertSign,cRLSign | ||||||
|  | extendedKeyUsage       = serverAuth,clientAuth | ||||||
|  | subjectKeyIdentifier   = hash | ||||||
|  | authorityKeyIdentifier = keyid:always | ||||||
|  | authorityInfoAccess    = 1.3.6.1.5.5.7.48.2;URI:http://test.cacert.org/ca/root/ca.crt,OCSP;URI:http://ocsp.test.cacert.org/ | ||||||
|  | crlDistributionPoints  = URI:http://crl.test.cacert.org/class3.crl | ||||||
|  | certificatePolicies    = @policy_class3_ca | ||||||
|  | 
 | ||||||
|  | [server_ext] | ||||||
|  | basicConstraints       = critical,CA:false | ||||||
|  | keyUsage               = digitalSignature,keyEncipherment | ||||||
|  | extendedKeyUsage       = serverAuth | ||||||
|  | subjectKeyIdentifier   = hash | ||||||
|  | authorityKeyIdentifier = keyid:always | ||||||
|  | authorityInfoAccess    = 1.3.6.1.5.5.7.48.2;URI:http://test.cacert.org/ca/class3/ca.crt,OCSP;URI:http://ocsp.test.cacert.org/ | ||||||
|  | crlDistributionPoints  = URI:http://crl.test.cacert.org/class3.crl | ||||||
|  | certificatePolicies    = @policy_class3_ca | ||||||
|  | 
 | ||||||
|  | [policy_class3_ca] | ||||||
|  | policyIdentifier       = 1.3.6.1.5.5.7.2.1 | ||||||
|  | CPS                    = http://test.cacert.org/ca/class3/cps.html | ||||||
|  | EOF | ||||||
|  | 
 | ||||||
|  | openssl req -new -x509 -config ca.cnf \ | ||||||
|  |   -keyout root/private/ca.key.pem \ | ||||||
|  |   -nodes \ | ||||||
|  |   -subj "/CN=Test Root/C=${COUNTRY_CODE}/O=${ORGANIZATION}" \ | ||||||
|  |   -days 3650 \ | ||||||
|  |   -extensions root_extensions \ | ||||||
|  |   -out root/ca.crt.pem | ||||||
|  | openssl req -new -config ca.cnf \ | ||||||
|  |   -keyout class3/private/ca.key.pem \ | ||||||
|  |   -nodes \ | ||||||
|  |   -subj "/CN=Class 3 Test CA/C=${COUNTRY_CODE}/O=${ORGANIZATION}" \ | ||||||
|  |   -out class3/ca.csr.pem | ||||||
|  | openssl ca -config ca.cnf \ | ||||||
|  |   -name root_ca \ | ||||||
|  |   -in class3/ca.csr.pem -out class3/ca.crt.pem \ | ||||||
|  |   -rand_serial \ | ||||||
|  |   -extensions class3_extensions \ | ||||||
|  |   -batch | ||||||
|  | openssl req -new -keyout certs/test.cacert.org.key.pem -nodes \ | ||||||
|  |   -out certs/test.cacert.org.csr.pem -subj "/CN=test.cacert.org" \ | ||||||
|  |   -addext "subjectAltName=DNS:test.cacert.org,DNS:www.test.cacert.org" | ||||||
|  | openssl req -new -keyout certs/secure.test.cacert.org.key.pem -nodes \ | ||||||
|  |   -out certs/secure.test.cacert.org.csr.pem -subj "/CN=secure.test.cacert.org" \ | ||||||
|  |   -addext "subjectAltName=DNS:secure.test.cacert.org" | ||||||
|  | openssl ca -config ca.cnf \ | ||||||
|  |   -name class3_ca \ | ||||||
|  |   -in certs/test.cacert.org.csr.pem \ | ||||||
|  |   -out certs/test.cacert.org.crt.pem \ | ||||||
|  |   -rand_serial \ | ||||||
|  |   -extensions server_ext \ | ||||||
|  |   -batch | ||||||
|  | openssl ca -config ca.cnf \ | ||||||
|  |   -name class3_ca \ | ||||||
|  |   -in certs/secure.test.cacert.org.csr.pem \ | ||||||
|  |   -out certs/secure.test.cacert.org.crt.pem \ | ||||||
|  |   -rand_serial \ | ||||||
|  |   -extensions server_ext \ | ||||||
|  |   -batch | ||||||
							
								
								
									
										29
									
								
								smtp.Dockerfile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								smtp.Dockerfile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | ||||||
|  | FROM debian:buster | ||||||
|  | 
 | ||||||
|  | RUN apt-get update \ | ||||||
|  |     && DEBIAN_FRONTEND=noninteractive \ | ||||||
|  |     apt-get install -y --no-install-recommends \ | ||||||
|  |     ca-certificates \ | ||||||
|  |     curl \ | ||||||
|  |     dumb-init \ | ||||||
|  |     mutt \ | ||||||
|  |     postfix \ | ||||||
|  |     postfix-pcre \ | ||||||
|  |     psmisc \ | ||||||
|  |     && apt-get clean \ | ||||||
|  |     && rm -rf /var/lib/apt/lists/* | ||||||
|  | 
 | ||||||
|  | EXPOSE 25 | ||||||
|  | 
 | ||||||
|  | RUN adduser --uid 1000 --gecos "catchall mailbox" --disabled-password catchall ; \ | ||||||
|  |     postconf home_mailbox=Maildir/ ; \ | ||||||
|  |     postconf maillog_file=/dev/stdout ; \ | ||||||
|  |     postconf mailbox_command= ; \ | ||||||
|  |     postconf virtual_alias_maps=pcre:/etc/postfix/virtual ; \ | ||||||
|  |     echo '/.*/ catchall' > /etc/postfix/virtual | ||||||
|  | 
 | ||||||
|  | VOLUME /home/catchall/Maildir | ||||||
|  | 
 | ||||||
|  | COPY docker/run-postfix /usr/local/bin/run-postfix | ||||||
|  | 
 | ||||||
|  | CMD ["dumb-init", "/usr/local/bin/run-postfix"] | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue