我这里表现为容器映射到宿主的端口,没有被防火墙保护。防火墙能用,但是报错,如下:
[root@localhost ~]# systemctl status firewalld
● firewalld.service – firewalld – dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 三 2017-07-26 00:42:31 CST; 7h left
Docs: man:firewalld(1)
Main PID: 760 (firewalld)
Memory: 0B
CGroup: /system.slice/firewalld.service
└─760 /usr/bin/python -Es /usr/sbin/firewalld –nofork –nopid
7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -t nat -C OUTPUT -m addrtype –dst-type LOCAL -j DOCKER ! –dst 127.0.0.0/8’ failed:
7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -t filter -C FORWARD -o docker0 -j DOCKER’ failed:
7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -t filter -C FORWARD -j DOCKER-ISOLATION’ failed:
7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -t nat -C POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE’ failed:
7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -t nat -C DOCKER -i docker0 -j RETURN’ failed:
7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -D FORWARD -i docker0 -o docker0 -j DROP’ failed:
7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -t filter -C FORWARD -i docker0 -o docker0 -j ACCEPT’ failed:
7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -t filter -C FORWARD -i docker0 ! -o docker0 -j ACCEPT’ failed:
7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -t filter -C FORWARD -o docker0 -m conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT’ failed:
7月 25 16:43:44 localhost.localdomain firewalld[760]: WARNING: COMMAND_FAILED: ‘/usr/sbin/iptables -w2 -t filter -C FORWARD -o docker0 -j DOCKER’ failed:
话不多说,帖文件:
FROM java:openjdk-8u111-jdk
VOLUME /tmp
ADD springboot.jar app.jar
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -jar /app.jar" ]
1.数字证书的一般流程
数字证书一般要自己生成私钥(key文件),然后用私钥生成证书申请(csr文件),然后用证书申请文件去要求证书颁发机构来颁发签名证书(cer文件或者crt文件)。证书办法机构可以是企业的RootCA或者分支CA,也可以是第三方受信任的CA。
2.数字证书的格式
目前一般第三方受信任的CA的签名证书都是用PEM格式,也就是Base64文件方式,这种正式一般只有签名证书部分。在Nginx或者Aliyun的CDNShang,这种证书一般需要配合私钥使用。IIS上一般使用PKS格式的证书,这种可是的证书是包含私钥的,所以一般的PKS格式证书,需要用PEM格式的证书和私钥合并而成,合并的时候,还会要求密码。
Java使用另一套证书格式,比如Tomcat上要求的证书格式为jks文件,这是一种java使用的所谓的证书库
3.数字证书的加工
数字证书到手后,一般不需要加工,可以直接使用。但是随着现在浏览器环境的多样化,以及Google对于https的不懈推广,导致不使用https的网站,会被chrome或者firefox等浏览器直接标记为不可信任,,而使用了https的网站,证书或者ssl有什么问题,会被直接标记为不安全。在中文字面上,不安全在中文字面上反而比不被信任更让中国人不安。
这里面基于数字证书的加工,主要是将拿到手的第三方信任办法的数字证书与信任的根证书之间的中间证书与我们拿到手的数字证书做合并。
为什么会有中间证书?这是因为证书信任机制,是我们信任第三方根CA,相应其办法的证书,和使用其证书签名的下级证书,都是被信任的。因此,一般第三方CA不直接发证书,而是下级CA办法,这样,看上去就是我们到手的证书是由子级CA办法的,并且是由其证书签名的,而子级CA的证书是由根CA颁发的,由根CA的证书签名。这样子级CA的证书就被叫做中间证书。在一般的证书查看工具中,都能看到一整个证书链(当前证书->中间证书->根证书)。
为什么要将中间证书合并?前面提到,证书信任的不是证书本身,信任的是一条证书链,或者说链上的所有证书都被信任。但是现在一些浏览器不会自动的获取中间证书,也就是没有办法信任整条证书链,反而是一些ie浏览器对此支持的很好。这种情况下,为避免因此导致的不安全提示,所以,我们一般都获取中间证书再与手中的证书合并。
怎么做证书合并?首先要确保手中的证书是PEM格式的,因为PEM格式证书是Base64编码的,也就是说所有字节都是文本编辑器打开时可读的。PEM格式的证书是以—–BEGIN CERTIFICATE—–开头,并以—–END CERTIFICATE—–结尾的,中间内容为Base64编码的证书内容。而中间证书有两种方式获取,一种是直接从办法机构下载,下载的时候注意要下载PEM格式的。我们打开中间证书,可以看到也是以—–BEGIN CERTIFICATE—–开头的,并以—–END CERTIFICATE—–结束的。我们只需要将中间证书的全部内容复制,并粘贴在到手证书的新一行内,并保存就完成了证书合并。
另外一种获取中间证书的方式,就是在windows中打开证书,查看证书链,然后直接将证书链的中间证书保存。中间证书可能不只一个,所以有几个中间证书,就需要合并几个中间证书。保存的证书需要检查格式,如果不是PEM格式的话,就需要转换格式为PEM。
4.服务器使用数字证书的后期设置
服务器上使用数字证书,也会被浏览器标记为不安全,这是因为服务器可能使用了被浏览器认为不安全握手协议或者加密算法。比如SSL3安全漏洞、Diffie-Hellman安全漏洞、RC4安全漏洞。IIS上可以使用注册表,将这些不安全的因素关闭掉。但是可能造成一些兼容性问题,比如XP上的IE6最高只支持SSL3,不支持新的TLS1,这样关闭了SSL3和SSL2之后,IE6就没办法连接了。
如果不考虑这些问题,可以直接使用下面链接提供的pwoershell脚本来开启所有安全设置。https://www.hass.de/content/setup-your-iis-ssl-perfect-forward-secrecy-and-tls-12
或者自己手动来做,可以参考前面连接,或者微软KBhttps://support.microsoft.com/zh-cn/help/2868725/microsoft-security-advisory-update-for-disabling-rc4
5.检验服务器安全
使用网站https://www.ssllabs.com/ssltest/ 来检验服务器安全
1 安装的MySQL for Visual Studio之前需要先安装MySQL的Connector/NET
2 Connector/NET和MySQL for Visual Studio建议都安装release的版本。
3 在项目中创建MySQL的EF模型前,项目里面需要先用Nuget安装MySQL.Data.Entity,同样建议安装release版本。
4 更新EnityFramework到最新的版本。
因为:
- 如果没有按照1、2和3的顺序来做的话,会出现创建连接的时候没有mysql的驱动。
- 不都是用同意的release版本的话,可能在创建完成数据连接以后,选择表之前,窗口闪退。闪退的情况在Visual Studio 2015和2017中都会发生。互联网上还有2013同类问题的报告。
- EntityFramework不升级到最新版的话,会有提示问题你是否生产EF5的实体模型……
近期评论