最近看了一下spring security相关知识点,尤其是https的实现,由此引发了几个关联问题。
1.如何在本地实现https通信.tomcat需要配置什么,浏览器需要配置什么。(开发测试阶段tomcat一般安装在本地)
2.当使用maven的tomcat插件时实现https通信的配置其实和第一个类似,需要解决的问题时怎么加载外在的tomcat配置文件从而覆盖tomcat插件的配置文件,因为我们需要修改tomcat的server.xml文件才能实现https通信.
相关书籍推荐:
【Spring实战】中第9章保护web应用的内容,
【Java核心技术 卷2】中第9章安全章节的内容
谷歌也是一位好老师,看到一篇文章觉得不错,谢谢网友的分享.
链接
补充:
对于自签名的证书,就是未知机构颁发的证书访问时也许仍然会出现你的连接不安全的警告,这是因为你的证书是自签名的,我们可以通过忽略该提示直接进行访问。
火狐浏览器:
自签名证书
在网站使用自签名的证书时,点击 “连接不安全” 错误页面上的 高级,你会看到如下错误信息:
由于证书是自签名,所以不可信。
缺省状态下,由未知机构颁发的自签名证书不被信任。自签名证书可以保证数据不被监听,但是却未告知数据的接收方是谁。对于不公开的内部网,这不是问题,此时你可以忽略该警告信息。
绕过该警告
警告: 绝不要为流行网站或金融交易网站添加证书例外——无效的证书此时意味者连接被第三方破坏。
如果网站允许,你可以添加例外以便能够在证书缺省不被信任的情况下访问该网站:
在警告页,点击 高级。
点击 添加例外…。 添加安全例外 对话框会出现。
阅读该网站对问题的描述。你还可以点击 显示… 来详细审查不被信任的证书。
如果你确信可以相信该网站,请点击 确认安全例外 。
IE,chrome浏览器同理直接跳过警告即可访问.
maven中tomcat插件如何实现https通信.
<!-- Main configuration for embedded Tomcat -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<additionalConfigFilesDir>${project.build.directory}/${tomcat.conf.dir.name}</additionalConfigFilesDir>
<!-- See the configuration in the keytool-maven-plugin -->
<keystorePass>broadleaf</keystorePass>
<keystoreFile>${webappDirectory}/WEB-INF/blc-example.keystore</keystoreFile>
<!-- Set within each project -->
<port>${httpPort}</port>
<httpsPort>${httpsPort}</httpsPort>
<path>${path}</path>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
<version>7.0.30</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
<type>jar</type>
</dependency>
</dependencies>
</plugin>
重点关注KeystorePass,KeystoreFile标签,这两个标签分别配置了Keystore的密码和Keystore文件位置.
生成Keystore如果不是内置的tomcat我们可以使用jdk中bin目录下的keytool工具来生成证书,对于内置的tomcat我们可以使用一个maven插件,keytool-maven-plugin.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>keytool-maven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<phase>generate-resources</phase>
<id>generateKeyPair</id>
<goals>
<goal>generateKeyPair</goal>
</goals>
</execution>
</executions>
<configuration>
<keystore>${webappDirectory}/WEB-INF/blc-example.keystore</keystore>
<dname>cn=localhost</dname>
<keypass>broadleaf</keypass>
<storepass>broadleaf</storepass>
<alias>broadleaf</alias>
<keyalg>RSA</keyalg>
<skipIfExist>true</skipIfExist>
</configuration>
</plugin>
我们这里的插件目标是generateKeyPair我的理解就是生成一对证书,即服务器端和客户端。我们通过keystore指定了证书库的文件路径。keypass和storepass一个是服务器端证书密码,一个是证书库的密码.证书库密码tomcat配置时有用;keyalg指定了密钥使用的算法;alias是证书库的别名;dname指定了证书拥有者的信息,这里是localhost。更多的keytool命令参数含义可以浏览下面链接:
点我