Zertifikate Verzeichnis (openssl rehash)

Submitted by admin on So, 11.12.2016 - 11:16

In vielen Fällen braucht man ein Verzeichnis mit vertrauenswürdigen CAs. Damit die ganzen Tools (z.B. Apache httpd, OpenLDAP etc.) dieses Verzeichnis benutzen können, müssen Links erstellt werden, die einen Hash enthalten. Am besten macht man das mit einem Makefile:

##
##  Makefile to keep the hash symlinks in SSLCACertificatePath up to date
##  Copyright (c) 1998-2000 Ralf S. Engelschall, All Rights Reserved. 
##

SSL_PROGRAM=

update: clean
	-@ssl_program="$(SSL_PROGRAM)"; \
	if [ ".$$ssl_program" = . ]; then \
	    for dir in . `echo $$PATH | sed -e 's/:/ /g'`; do \
	        for program in openssl ssleay; do \
	            if [ -f "$$dir/$$program" ]; then \
	                if [ -x "$$dir/$$program" ]; then \
	                    ssl_program="$$dir/$$program"; \
						break; \
	                fi; \
	            fi; \
	        done; \
	        if [ ".$$ssl_program" != . ]; then \
				break; \
	        fi; \
	    done; \
	fi; \
	if [ ".$$ssl_program" = . ]; then \
	    echo "Error: neither 'openssl' nor 'ssleay' program found" 1>&2; \
	    exit 1; \
	fi; \
	for file in *.crt; do \
	    if [ ".`grep SKIPME $$file`" != . ]; then \
	        echo dummy |\
	        awk '{ printf("%-15s ... Skipped\n", file); }' \
	        "file=$$file"; \
	    else \
	        n=0; \
	        while [ 1 ]; do \
	            hash="`$$ssl_program x509 -noout -hash <$$file`"; \
	            if [ -r "$$hash.$$n" ]; then \
	                n=`expr $$n + 1`; \
	            else \
	                echo dummy |\
	                awk '{ printf("%-15s ... %s\n", file, hash); }' \
	                "file=$$file" "hash=$$hash.$$n"; \
	                ln -s $$file $$hash.$$n; \
	                break; \
	            fi; \
	        done; \
	    fi; \
	done
	chcon -v --type=httpd_config_t .

clean:
	-@rm -f [0-9a-fA-F]*.[0-9]*

Quelle: OpenSSL Source Code

Verwendung

Das Makefile muss sich im Verzeichnis mit den Zertifikaten befinden. Dieses Verzeichnis muss auch in der Anwendung angegeben werden. Das Makefile wird von der Anwendung ignoriert. Aufruf mit make ohne weitere Parameter. Nach der erfolgreichen Anwendungen sind dann Links mit namen wie z.B. 32b0cb7e.0 zu finden, diese Links zeigen auf die Files mit den Zertifikaten. Die Zertifikate müssen im PEM Format in Dateien nach dem Muster <name>.crt vorliegen.