HTTPS的配置

来源:互联网 发布:淘宝基金欠款 编辑:程序博客网 时间:2024/06/05 14:13

在基于spring框架下使用HTTPS技术需要对Tomcat服务器以及Spring进行配置。

首先使用java命令:keytool

jdk1.7中keytool命令列表如下:

-certreq            生成证书请求
 -changealias        更改条目的别名
 -delete             删除条目
 -exportcert         导出证书
 -genkeypair         生成密钥对
 -genseckey          生成密钥
 -gencert            根据证书请求生成证书
 -importcert         导入证书或证书链
 -importkeystore     从其他密钥库导入一个或所有条目
 -keypasswd          更改条目的密钥口令
 -list               列出密钥库中的条目
 -printcert          打印证书内容
 -printcertreq       打印证书请求的内容
 -printcrl           打印 CRL 文件的内容
 -storepasswd        更改密钥库的存储口令

快速创建命令:

keytool -genkey -alias tomcat -keyalg RSA

输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
  [Unknown]: 
您的组织单位名称是什么?
  [Unknown]: 
您的组织名称是什么?
  [Unknown]: 
您所在的城市或区域名称是什么?
  [Unknown]: 
您所在的省/市/自治区名称是什么?
  [Unknown]: 
该单位的双字母国家/地区代码是什么?
  [Unknown]: 


创建完成后可以通过keytool -list 查看

==========================

输入密钥库口令:
密钥库类型: JKS
密钥库提供方: SUN
您的密钥库包含 1 个条目

==========================

同时在用户根目录下将会创建一个.keystore文件

将.keystore文件放在一个合适的位置(之后要用)

配置Tomcat:

找到Tomcat目录下的conf/server.xml文件

找到有关8443端口的一项,取消注释,修改几项。如:

<Connector port="8443" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
               keystoreFile="conf/keystore/.keystore" keystorePass="你的密匙口令"
               protocol="org.apache.coyote.http11.Http11NioProtocol"
               acceptCount="100" disableUploadTimeout="true" enableLookups="false"
    
    />

配置成功后,启动 Tomcat 并访问 https://localhost:8443. 你将看到 Tomcat 默认的首页。

配置项目

配置应用使用 SSL,不同框架配置方式可能有所不同,一下是通用配置:

打开应用的 web.xml 文件,增加配置如下:

<security-constraint>    <web-resource-collection>        <web-resource-name>securedapp</web-resource-name>        <url-pattern>/*</url-pattern>    </web-resource-collection>    <user-data-constraint>        <transport-guarantee>CONFIDENTIAL</transport-guarantee>    </user-data-constraint></security-constraint>

将 URL 映射设为 /* ,这样你的整个应用都要求是 HTTPS 访问,而 transport-guarantee 标签设置为 CONFIDENTIAL 以便使应用支持 SSL。

如果你希望关闭 SSL ,只需要将 CONFIDENTIAL 改为 NONE 即可。

对站点进行自动的安全保护

         我们假设你在对客户的数据进行SSL保护时遇到了麻烦,你想把应用的特定部分置于SSL的保护之下。幸运的是,Spring Security让这一切变得很简单,只需要在<intercept-url>声明上添加一个配置属性。

         requires-channel属性能够添加到任何<intercept-url>声明中,以要求所有匹配的URL要以特定的协议(HTTP,HTTPS或都可以)进行传递。如果按照这种形式来增强JBCP Pets站点,配置可能如下所示:

  1. <http auto-config="true" use-expressions="true">  
  2.   <intercept-url pattern="/login.do" access="permitAll"   
  3.                  requires-channel="https"/>  
  4.   <intercept-url pattern="/account/*.do"   
  5.                  access="hasRole('ROLE_USER') and fullyAuthenticated"   
  6.                  requires-channel="https"/>  
  7.   <intercept-url pattern="/*" access="permitAll"   
  8.                  requires-channel="any"/>  
  9.   <!-- ... -->  
  10. </http>   

 如果此时重启应用,你将会发现:

l  现在访问登录页和账号页需要HTTPS,浏览器将会为用户自动从不安全的(HTTP)URL重定向到安全的URL。

安全的端口映射

         在一些特定的环境中,可能不会使用标准的HTTP和HTTPS端口,其默认为80/443或8080/8443。在这种情况下,你必须配置你的应用包含明确的端口映射,这样ChannelEntryPoint的实现能够确定当重定向用户到安全或不安全的URL时,使用什么端口。

         这仅需要增加额外的配置元素<port-mappings>,它能够指明除了默认的端口以外,额外的HTTP 的HTTPS端口:

 

  1. <port-mappings>  
  2.   <port-mapping http="9080" https="9443"/>  
  3. </port-mappings>  

 如果你的应用服务器在反向代理后的话,端口映射将会更加的重要。


原创粉丝点击