Fix backslashes in SHIBSP_PREFIX variable by manually creating it during the script...
[shibboleth/sp.git] / configs / keygen.bat
1 @echo off\r
2 setlocal\r
3 \r
4 set DAYS=\r
5 set YEARS=\r
6 set FQDN=\r
7 set ENTITYID=\r
8 set TEMP_DOMAIN_NAME=\r
9 set PARAM=\r
10 \r
11 set PREFIX=%~dp0\r
12 \r
13 :opt_start\r
14 set PARAM=%1\r
15 if not defined PARAM goto opt_end\r
16 if %1==-h goto opt_fqdn\r
17 if %1==-e goto opt_entityid\r
18 if %1==-y goto opt_years\r
19 if %1==-f goto opt_force\r
20 goto usage\r
21 :opt_end\r
22 \r
23 if exist "%PREFIX%sp-key.pem" goto protect\r
24 if exist "%PREFIX%sp-cert.pem" goto protect\r
25 \r
26 if not defined YEARS set YEARS=10\r
27 set /a DAYS=%YEARS%*365\r
28 \r
29 if not defined FQDN goto guess_fqdn\r
30 \r
31 :generate\r
32 set PATH=%PREFIX%..\..\lib;%PREFIX%..\..\bin\r
33 set CNF="%PREFIX%sp-cert.cnf"\r
34 echo # OpenSSL configuration file for creating sp-cert.pem    >%CNF%\r
35 echo [req]                                                   >>%CNF%\r
36 echo prompt=no                                               >>%CNF%\r
37 echo default_bits=2048                                       >>%CNF%\r
38 echo encrypt_key=no                                          >>%CNF%\r
39 echo default_md=sha1                                         >>%CNF%\r
40 echo distinguished_name=dn                                   >>%CNF%\r
41 echo # PrintableStrings only                                 >>%CNF%\r
42 echo string_mask=MASK:0002                                   >>%CNF%\r
43 echo x509_extensions=ext                                     >>%CNF%\r
44 echo [dn]                                                    >>%CNF%\r
45 echo CN=%FQDN%                                               >>%CNF%\r
46 echo [ext]                                                   >>%CNF%\r
47 if defined ENTITYID (echo subjectAltName=DNS:%FQDN%,URI:%ENTITYID% >>%CNF%) else (echo subjectAltName=DNS:%FQDN% >>%CNF%)\r
48 echo subjectKeyIdentifier=hash                               >>%CNF%\r
49 %PREFIX%..\..\bin\openssl.exe req -config %PREFIX%sp-cert.cnf -new -x509 -days %DAYS% -keyout %PREFIX%sp-key.pem -out %PREFIX%sp-cert.pem\r
50 del %CNF%\r
51 exit /b\r
52 \r
53 :protect\r
54 echo The files sp-key.pem and/or sp-cert.pem already exist!\r
55 echo Use -f option to force recreation of keypair.\r
56 exit /b\r
57 \r
58 :opt_force\r
59 if exist "%PREFIX%sp-key.pem" del "%PREFIX%sp-key.pem"\r
60 if exist "%PREFIX%sp-cert.pem" del "%PREFIX%sp-cert.pem"\r
61 shift\r
62 goto opt_start\r
63 \r
64 :opt_fqdn\r
65 set FQDN=%2\r
66 shift\r
67 shift\r
68 goto opt_start\r
69 \r
70 :opt_entityid\r
71 set ENTITYID=%2\r
72 shift\r
73 shift\r
74 goto opt_start\r
75 \r
76 :opt_years\r
77 set DAYS=%2\r
78 shift\r
79 shift\r
80 goto opt_start\r
81 \r
82 :usage\r
83 echo usage: keygen [-h hostname for cert] [-y years to issue cert] [-e entityID to embed in cert]\r
84 exit /b\r
85 \r
86 :guess_fqdn\r
87 for /F "tokens=2 delims=:" %%i in ('"ipconfig /all | findstr /c:"Primary DNS Suffix" /c:"Primary Dns Suffix""') do set TEMP_DOMAIN_NAME=%%i\r
88 if defined TEMP_DOMAIN_NAME set FQDN=%TEMP_DOMAIN_NAME: =%\r
89 set TEMP_DOMAIN_NAME=\r
90 if defined USERDNSDOMAIN set FQDN=%USERDNSDOMAIN%\r
91 \r
92 for /F %%i in ('hostname') do set HOST=%%i\r
93 if defined FQDN (set FQDN=%HOST%.%FQDN%) else (set FQDN=%HOST%)\r
94 \r
95 echo >%FQDN%\r
96 for /F %%i in ('dir /b/l %FQDN%') do set FQDN=%%i\r
97 del %FQDN%\r
98 goto generate\r