# HG changeset patch # User Sergey Kandaurov # Date 1419348663 -10800 # Node ID 2bc470a5862138ffa45cb9ea5357cfef3b928bd7 # Parent 9f972a386434847c0bc22f3dc706190af074a729 Tests: test for loading "engine:..." keys. diff --git a/ssl_engine_keys.t b/ssl_engine_keys.t new file mode 100644 --- /dev/null +++ b/ssl_engine_keys.t @@ -0,0 +1,129 @@ +#!/usr/bin/perl + +# (C) Sergey Kandaurov +# (C) Nginx, Inc. + +# Tests for http ssl module, loading "engine:..." keys. + +############################################################################### + +use warnings; +use strict; + +use Test::More; + +BEGIN { use FindBin; chdir($FindBin::Bin); } + +use lib 'lib'; +use Test::Nginx; + +############################################################################### + +select STDERR; $| = 1; +select STDOUT; $| = 1; + +plan(skip_all => 'win32') if $^O eq 'MSWin32'; + +plan(skip_all => 'may not work, leaves coredump') + unless $ENV{TEST_NGINX_UNSAFE}; + +my $t = Test::Nginx->new()->has(qw/http http_ssl/)->has_daemon('openssl') + ->has_daemon('softhsm')->has_daemon('pkcs11-tool')->plan(1); + +$t->write_file_expand('nginx.conf', <<'EOF'); + +%%TEST_GLOBALS%% + +daemon off; + +events { +} + +http { + %%TEST_GLOBALS_HTTP%% + + server { + listen 127.0.0.1:8443 ssl; + listen 127.0.0.1:8080; + server_name localhost; + + ssl_certificate_key engine:pkcs11:slot_0-id_00; + ssl_certificate localhost.crt; + + location / { + # index index.html by default + } + location /proxy { + proxy_pass https://127.0.0.1:8443/; + } + } +} + +EOF + +# Create a SoftHSM token with a secret key, and configure OpenSSL +# to access it using the pkcs11 engine, see detailed example +# posted by Dmitrii Pichulin here: +# +# http://mailman.nginx.org/pipermail/nginx-devel/2014-October/006151.html +# +# Note that library paths may differ on different systems, +# and may need to be adjusted. + +$t->write_file('openssl.conf', <testdir(); + +$t->write_file('softhsm.conf', <>$d/openssl.out 2>&1"); + + system('pkcs11-tool --module=/usr/local/lib/softhsm/libsofthsm.so ' + . '-p 1234 -l -k -d 0 -a nx_key_0 --key-type rsa:2048 ' + . ">>$d/openssl.out 2>&1"); + + system('openssl req -x509 -new -engine pkcs11 ' + . "-config '$d/openssl.conf' -subj '/CN=$name/' " + . "-out '$d/$name.crt' -keyform engine -text -key id_00 " + . ">>$d/openssl.out 2>&1") == 0 + or die "Can't create certificate for $name: $!\n"; +} + +$t->try_run('no ssl_certificate_key engine'); + +$t->write_file('index.html', ''); + +############################################################################### + +like(http_get('/proxy'), qr/200 OK/, 'ssl engine keys'); + +###############################################################################