有谁知道如何创build一个自签名的SSL证书与IIS(7)使用有主题替代名称(SAN)? 我需要证书才能validation主机名和IP地址,如下所示:
我一直在看的一些事情:
Windows SDK:makecert.exe(不支持SAN)
Windows API CertEnroll(Server 2008):使用PowerShell脚本(我已经能够得到这个与IIS工作,但是当我将证书导出到Java密钥库(必须有)时,我得到一个错误keytool错误:'java.lang .Exception:input不是X.509证书“)
以下是使用CertEnroll的PowerShell脚本示例: http : //blogs.technet.com/b/vishalagarwal/archive/2009/08/22/generating-a-certificate-self-signed-using-powershell-and-certenroll- interfaces.aspx
如果我可以让我的PowerShell脚本创build一个Java可以使用CertEnroll API识别的证书,那将是非常好的,但是在这一点上,任何有用的东西我都会很高兴听到。
我find了一个使用OpenSSL来做到这一点的方法。 我希望能使用CertEnroll,但是因为它给了我与Java的互操作性问题,我只是要使用OpenSSL。
以下是我如何使用OpenSSL为主题替代名称创build一个IIS证书。
首先创build一个OpenSSLconfiguration文本文件:
[req] distinguished_name = req_distinguished_name x509_extensions = v3_req prompt = no [req_distinguished_name] C = US ST = VA L = SomeCity O = MyCompany OU = MyDivision CN = ANDY [v3_req] keyUsage = keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1 = andy DNS.2 = 192.168.2.12 IP.1 = 192.168.2.12 IP.2 = 192.167.20.1
然后运行下面的OpenSSL命令:
openssl.exe req -x509 -nodes -days 730 -newkey rsa:2048 -keyout C:\cert.pem -out C:\cert.pem -config C:\PathToConfigFileAbove.txt openssl.exe pkcs12 -export -out C:\cert.pfx -in C:\cert.pem -name "My Cert" -passout pass:mypassword
这将创build一个PFX文件中的证书,可以导入到IIS。 我用powershell自动化了这样的:
# Get the certificate from the PFX file. $pfxcert = new-object system.security.cryptography.x509certificates.x509certificate2 $pfxcert.Import( "C:\cert.pfx", "mypassword", [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::MachineKeySet -bor ` [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable ) # Add the certificate to the windows stores. Get-Item -Path cert:\LocalMachine\My, cert:\LocalMachine\root | ForEach-Object { $store = $_ $store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite) $store.Add($pfxcert) $store.Close() } Add-PSSnapin -Name WebAdministration # IIS 7 Powershell module. Push-Location -Path IIS:\SslBindings # Create new IIS SSL bindings. Get-Item -Path "cert:\LocalMachine\My\$($pfxcert.Thumbprint)" | New-Item "0.0.0.0!443"
java的关键工具是挑剔的,它会允许导入。 但是,通过PowerShell创build的证书应该可以正常工作。
现在什么格式的证书? 如果您已经从Windows证书存储区导出,则可能是.pfx; 您需要转换为PEM编码的x509证书:
openssl pkcs12 -in /path/to/certbundle.pfx -out /public/key/path/certificate.crt -nokeys openssl pkcs12 -in /path/to/certbundle.pfx -out /private/key/path/certificate.key -nocerts -nodes
从那里,你将要检查文件的实际内容 – 这些Windows证书包括-----BEGIN CERTIFICATE-----部分上方的“Bag Attributes”部分,keytoolparsing器喜欢扼杀 – 随意删除,以便文件看起来就像这样,没有其他内容:
/public/key/path/certificate.crt
-----BEGIN CERTIFICATE----- MIIAAAA........ -----END CERTIFICATE-----
/private/key/path/certificate.key
-----BEGIN RSA PRIVATE KEY----- MIIAAAA........ -----END RSA PRIVATE KEY-----
这些证书文件应该更容易通过java keytool导入。
我以为SAN也不支持使用makecert,但后来我find了这个博客
看来您可以通过使用多个通用名称来获得与使用SAN相似的function。 例如makecert -n "CN=CertName;CN=pseudoSAN"
或者在你的例子"CN=Andy;CN=192.168.2.12"