如何使https:// localhost:port在嵌入式Jetty中使用自签名证书?

时间:2017-10-03 21:24:35

标签: java x509 embedded-jetty pkix

目标:我希望此网址(https://localhost:8083)在我的本地机器上使用我的自签名证书。

首先,我引用了这个网址(https://gist.github.com/oslego/f13e136ffeaa6174289a),我所做的是:

  

$ openssl genrsa -des3 -out server.orig.key 2048

     

$ openssl rsa -in server.orig.key -out server.key

     

$ openssl req -new -key server.key -out server.csr

     

国名(2个字母代码)[AU]:

     

...

     

通用名称:localhost.ssl

     

...

     

$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

     

$ echo“127.0.0.1 localhost.ssl”| sudo tee -a / private / etc / hosts

然后我通过执行

将server.crt转换为server.pem
  

$ openssl x509 -in server.crt -out keystore.pem -outform PEM

     

$ keytool -import -trustcacerts -alias testCert -file keystore.pem -keypass testpassword -keystore keystore.jks -storepass testpassword

     

$ keytool -export -alias mykey -keystore keystore.jks -rfc -file truststore

     

$ vim keystore.password //通过vim手动创建keystore.password

但是当我访问https://localhost:8083时,它无法使用SSL。

然后,
我还用

创建了另一个证书
  

通用名称:localhost

     

$ echo“127.0.0.1 localhost”| sudo tee -a / private / etc / hosts

但这并不奏效。 如何让https://localhost:8083使用我的自签名证书?

仅供参考,我使用嵌入式Jetty和Java正确读取所有信息 通过配置文件定义keystore.jks,truststore和keystore.password文件的位置。

1 个答案:

答案 0 :(得分:1)

(1)指示您使用加密进行genrsa,然后rsa删除加密,这表明某人不知道他们在谈论什么并且没有阅读过手册至少10年。指导您执行req -new然后x509 -req -signkey可以很好地指示某人不知道他们在谈论什么,并且至少5年没有阅读该手册页。我建议完全忽略任何说这些内容的网站或作者。此外,x509 -req -signkeyreq -new -x509的证书输出已经是PEM,不需要任何转换。

(2)您指出将名称翻译放在/private/etc/hosts中,并且不知道您正在使用的浏览器和/或其他客户端或中间件,但我从未听说过任何使用此类文件进行名称解析的客户,除非您使用的是您遗漏的某种监狱或容器。 (几乎所有Unix系统都使用/etc/hosts但可以使用openssl pkcs12 -export但不一样。)

(3)你也不知道'不工作'是什么意思。但是,如果它意味着由于密码不匹配而导致握手失败(并不总是如此识别),那么毫无疑问是因为您放入了Java密钥库,因此当 SSL / TLS服务器需要私钥时,Jetty仅为您提供证书。这使得这与https://stackoverflow.com/a/37423399/2868801链接的多个问题重复,所有问题都解释为您需要使用req -new -x509将证书PLUS私钥转换为PKCS12文件,然后使用或者用Java转换PKCS12文件。

(4)jww部分正确;当前标准要求证书包含SubjectAltName(SAN)扩展,您应该这样做 - 使用{{1}}而不是您拥有的方法更容易,请参阅(1)。但是到目前为止只有Chrome 强制执行此要求,因此只有Subject.CN的官方过时的证书才会在其他客户端中生效 - 一旦您将其设置为信任此证书,这一直是自签名的问题。