分类目录归档:碎碎念

数据演绎之争

现在数据的重要性显而易见,基本上所有的公司都会有数据部门或者信息部门,通过分析数据,来发现问题或者制定下一步的战略方针,但是不同的公司在如何利用数据的问题上,略有不同.

第一类,正常的公司.首先根据数据区间拉到符合条件的数据,然后去掉这部分数据中的无效数据(异常数据,错误数据等),然后根据数据分析出一个某个结论或者发现导致出现这些不好数据原因.

第二类,首先得到一个结论,然后拿数据去验证这个结论是不是正确,比如已经认定某个时间段内的销售额是增长的,然后通过拉数据来看是不是增长的,如果与结论不符,那就通过数据处理,是不是拉的数据区间有问题,是不是数据有问题,是不是数据算法有问题.通过不断修正,来得到数据增长的结论.

求医记

  • 1.头孢唑林钠过敏.不可以使用
  • 2.现在是使用开浦兰1ml/次,2次/天

  • 2018.12.19凌晨 高热惊厥5分钟
  • 2019.01.24 浅睡后突发
  • 2019.01.25 4小时视频脑电图
  • 2019.04.04 第二瓶左乙拉西坦开封
  • 2019.08.25 第四瓶左乙拉西坦开封

解决邮件javax.mail发送邮件的问题unable to find valid certification path to requested target

问题的根本是:

缺少安全证书时出现的异常。

解决问题方法:

将你要访问的webservice/url….的安全认证证书导入到客户端即可。

以下是获取安全证书的一种方法,通过以下程序获取安全证书

 

/*
* Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* – Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* – Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* – Neither the name of Sun Microsystems nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS
* IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.security.KeyStore;
import java.security.MessageDigest;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;

public class InstallCert {

public static void main(String[] args) throws Exception {
String host;
int port;
char[] passphrase;
if ((args.length == 1) || (args.length == 2)) {
String[] c = args[0].split(“:”);
host = c[0];
port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);
String p = (args.length == 1) ? “changeit” : args[1];
passphrase = p.toCharArray();
} else {
System.out
.println(“Usage: java InstallCert <host>[:port] [passphrase]”);
return;
}

File file = new File(“jssecacerts”);
if (file.isFile() == false) {
char SEP = File.separatorChar;
File dir = new File(System.getProperty(“java.home”) + SEP + “lib”
+ SEP + “security”);
file = new File(dir, “jssecacerts”);
if (file.isFile() == false) {
file = new File(dir, “cacerts”);
}
}
System.out.println(“Loading KeyStore ” + file + “…”);
InputStream in = new FileInputStream(file);
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(in, passphrase);
in.close();

SSLContext context = SSLContext.getInstance(“TLS”);
TrustManagerFactory tmf = TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);
X509TrustManager defaultTrustManager = (X509TrustManager) tmf
.getTrustManagers()[0];
SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
context.init(null, new TrustManager[] { tm }, null);
SSLSocketFactory factory = context.getSocketFactory();

System.out
.println(“Opening connection to ” + host + “:” + port + “…”);
SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
socket.setSoTimeout(10000);
try {
System.out.println(“Starting SSL handshake…”);
socket.startHandshake();
socket.close();
System.out.println();
System.out.println(“No errors, certificate is already trusted”);
} catch (SSLException e) {
System.out.println();
e.printStackTrace(System.out);
}

X509Certificate[] chain = tm.chain;
if (chain == null) {
System.out.println(“Could not obtain server certificate chain”);
return;
}

BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));

System.out.println();
System.out.println(“Server sent ” + chain.length + ” certificate(s):”);
System.out.println();
MessageDigest sha1 = MessageDigest.getInstance(“SHA1”);
MessageDigest md5 = MessageDigest.getInstance(“MD5″);
for (int i = 0; i < chain.length; i++) {
X509Certificate cert = chain[i];
System.out.println(” ” + (i + 1) + ” Subject ”
+ cert.getSubjectDN());
System.out.println(” Issuer ” + cert.getIssuerDN());
sha1.update(cert.getEncoded());
System.out.println(” sha1 ” + toHexString(sha1.digest()));
md5.update(cert.getEncoded());
System.out.println(” md5 ” + toHexString(md5.digest()));
System.out.println();
}

System.out
.println(“Enter certificate to add to trusted keystore or ‘q’ to quit: [1]”);
String line = reader.readLine().trim();
int k;
try {
k = (line.length() == 0) ? 0 : Integer.parseInt(line) – 1;
} catch (NumberFormatException e) {
System.out.println(“KeyStore not changed”);
return;
}

X509Certificate cert = chain[k];
String alias = host + “-” + (k + 1);
ks.setCertificateEntry(alias, cert);

OutputStream out = new FileOutputStream(“jssecacerts”);
ks.store(out, passphrase);
out.close();

System.out.println();
System.out.println(cert);
System.out.println();
System.out
.println(“Added certificate to keystore ‘jssecacerts’ using alias ‘”
+ alias + “‘”);
}

private static final char[] HEXDIGITS = “0123456789abcdef”.toCharArray();

private static String toHexString(byte[] bytes) {
StringBuilder sb = new StringBuilder(bytes.length * 3);
for (int b : bytes) {
b &= 0xff;
sb.append(HEXDIGITS[b >> 4]);
sb.append(HEXDIGITS[b & 15]);
sb.append(‘ ‘);
}
return sb.toString();
}

private static class SavingTrustManager implements X509TrustManager {

private final X509TrustManager tm;
private X509Certificate[] chain;

SavingTrustManager(X509TrustManager tm) {
this.tm = tm;
}

public X509Certificate[] getAcceptedIssuers() {
throw new UnsupportedOperationException();
}

public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
throw new UnsupportedOperationException();
}

public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
this.chain = chain;
tm.checkServerTrusted(chain, authType);
}
}

}

编译InstallCert.java,然后执行:java InstallCert hostname,比如:
java InstallCert www.twitter.com
会看到如下信息

java InstallCert www.twitter.com
Loading KeyStore /usr/java/jdk1.6.0_16/jre/lib/security/cacerts…
Opening connection to www.twitter.com:443…
Starting SSL handshake…

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:150)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1476)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:174)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:168)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:846)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:106)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:495)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:433)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:815)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1025)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1038)
at InstallCert.main(InstallCert.java:63)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:221)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:145)
at sun.security.validator.Validator.validate(Validator.java:203)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:172)
at InstallCert$SavingTrustManager.checkServerTrusted(InstallCert.java:158)
at com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted(SSLContextImpl.java:320)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:839)
… 7 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:236)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:194)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:216)
… 13 more

Server sent 2 certificate(s):

1 Subject CN=www.twitter.com, O=example.com, C=US
Issuer CN=Certificate Shack, O=example.com, C=US
sha1 2e 7f 76 9b 52 91 09 2e 5d 8f 6b 61 39 2d 5e 06 e4 d8 e9 c7
md5 dd d1 a8 03 d7 6c 4b 11 a7 3d 74 28 89 d0 67 54

2 Subject CN=Certificate Shack, O=example.com, C=US
Issuer CN=Certificate Shack, O=example.com, C=US
sha1 fb 58 a7 03 c4 4e 3b 0e e3 2c 40 2f 87 64 13 4d df e1 a1 a6
md5 72 a0 95 43 7e 41 88 18 ae 2f 6d 98 01 2c 89 68

Enter certificate to add to trusted keystore or ‘q’ to quit: [1]

输入1,回车,然后会在当前的目录下产生一个名为“ssecacerts”的证书。

 

 

将证书拷贝到$JAVA_HOME/jre/lib/security目录下,或者通过以下方式:

竹苞之问题清单

1.发现潜在漏洞,先不处理,言之 现在没发生,将来也不一定会发生,等出了问题再说.

2.权责不分,做的时候告诉只要按照要求去做就好了,出了问题就说为啥不想清楚再做

3.拉帮结派

4.一言堂

 

 

一边津津有味吃屎,一边骂骂咧咧讲屎臭

 

墨守成规

 一个年轻的姑娘替她的新婚丈夫煮一块火腿。她先把火腿的两头去掉,然后放入锅中,丈夫问她为什么这样做,她回答说,因为她的母亲“一向都如此做”。

        后来有一天,这对夫妇到娘家去吃饭,餐桌上也有火腿。于是,女婿随口问为什么要把火腿的两头去掉。母亲耸耸肩膀说,她也不知道,只知道她的母亲“一向都这样做”。

        最后,他又问他太太的祖母,为什么总是把火腿的两头切掉,然后再下锅去烹煮。

        祖母笑着回答:“因为我的锅太小了”。

        很多年以前,俄罗斯有个沙皇来到一个正站立在皇宫花园岗位上的卫兵面前。他问这个人:“卫兵,你在守卫什么?”

        “我不知道,陛下。”那个卫兵回答道,“卫兵队长命令我站在这个岗位上”。

         于是,沙皇决心找出这个显然毫无用处的岗哨和当初设置的原因。他命令手下到档案馆查处这项规定的由来。最后,得知原来在很早以前,恺撒林大帝曾在那里栽植了玫瑰花丛,而且命令一个卫兵守卫以防它被践踏。至今,玫瑰花丛已经荒废了一百多年,但是那里仍设有岗哨。