在过去的两天里,我一直在尝试做一件事,能够以www.gestao.com.br的身份访问我的Web应用程序(localhost:8080 / evop),并在我的Web服务器上启用https,以便{ {3}}也可以。
我需要一个本地主机Web应用程序,在其URL前面显示https(而不是红色的https)。
PS:使用Tomcat作为Web服务器以及Windows和主机OS。
我们在每个客户端上都安装了Tomcat,以便他们可以在其公司本地运行我们的Web应用程序,一段时间之后,我们开始收到一些抱怨,即即使它们在本地连接也不安全,所以为了取悦我们的客户,我们决定在本地的Tomcat服务器上启用SSL。
使用JDK随附的keytool可以很容易地在服务器上启用https,但是由于自签名,https横穿了读取行。此时,我知道需要一个CA来对证书进行签名,但是由于这都是在本地完成的,并且没有购买任何真实域,因此无法使用像LetsEncrypt这样的CA。
背景故事足够多了,基本上我在Windows 10计算机上有一台Tomcat服务器,并且它需要具有签名的SSL证书,因此该服务器上托管的应用程序的网址前带有 https(不是越过https)
为此,我发现我必须成为自己的CA。这是我的步骤:
www.gestao.com.br
localhost:8080/evop
;但是,我通过在文件末尾添加C:\Windows\System32\drivers\etc\hosts
来更改127.0.0.1 www.gestao.com.br
,因此可以使用www.gestao.com.br:8080/evop
server.xml
并添加以下内容来解决URL问题中的端口:<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" />
www.gestao.com.br/evop
evop
的文件夹更改为ROOT,然后我可以用wwww.gestao.com.br
加载我的应用程序openssl genrsa -des3 -out rootSSL.key 2048
openssl req -x509 -new -nodes -key rootSSL.key -sha256 -days 1024 -out rootSSL.pem
openssl req -new -sha256 -nodes -out gestao.csr -newkey rsa:2048 -keyout gestao.key -subj "/C=BR/ST=MS/L=Campo Grande/O=Evop/OU=Dev/CN=www.gestao.com.br/emailAddress=dev@evop.com.br"
openssl x509 -req -in gestao.csr -CA rootSSL.pem -CAkey rootSSL.key -CAcreateserial -out gestao.crt -days 500 -sha256 -extensions "authorityKeyIdentifier=keyid,issuer\n basicConstraints=CA:FALSE\n keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment\n subjectAltName=DNS:www.gestao.com.br"
rootSSL.pem
通过JDK的keytool通过以下方式创建密钥库:keytool -import -alias root -keystore tomcat.jks -trustcacerts -file rootSSL.pem
keytool -import -alias tomcat -keystore tomcat.jks -file gestao.crt
server.xml
上配置了连接器,如下所示:<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />
<Connector port="443" protocol="HTTP/1.1" maxThreads="150" SSLEnabled="true" compression="on" scheme="https" secure="true" keystoreFile="conf/tomcat.jks" keyAlias="tomcat" keystorePass="password" clientAuth="false" SSLVerifyClient="none" sslProtocol="TLSv1.2" />
<Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="conf/gestao.key" certificateFile="conf/gestao.crt" type="RSA" />
</SSLHostConfig>
</Connector>