Я зашел на сайт digicert.com и загрузил сертификаты как p7b, затем импортировал их в связку ключей Mac, а затем экспортировал в виде файлов .cer. Затем я вставил их в файлы проекта Netbeans, чтобы попытаться реализовать следующий код. У меня такое ощущение, что я «работаю в темноте» с SSL, и меня никогда не учили этой части. Пожалуйста, помогите!
Код, работающий с http-запросами:
Код: Выделить всё
public class ServerRequests {
public static final String CRLF = "\r\n";
ServerSocket s;
protected ServerSocket getServerSocket(int port) throws Exception{
return new ServerSocket(port);
}
public void runServer(int port) throws Exception{
s = getServerSocket(port);
while(true) {
try {
System.out.println("server is running");
Socket us = s.accept();
Handler(us);
} catch (IOException e) {
System.err.println(e);
}
}
}
public void Handler(Socket s) throws Exception, MessagingException {
Код: Выделить всё
protected ServerSocket getServerSocket(int port) throws Exception{
return new ServerSocket(port);
}
public void runServer(int port) throws Exception{
char[] passphrase = "passphrase".toCharArray();
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(null, passphrase);
try (FileOutputStream fos = new FileOutputStream("kss.jks")) {
ks.store(fos, passphrase);
}
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate[] chain = new X509Certificate[3];
chain[0] = (X509Certificate) cf.generateCertificate(new FileInputStream("/Users/myname/Desktop/
NetBeansProjects/PHQForum/root.cer"));
chain[1] = (X509Certificate) cf.generateCertificate(new FileInputStream("/Users/myname/Desktop/
NetBeansProjects/PHQForum/rs.cer"));
chain[2] = (X509Certificate) cf.generateCertificate(new FileInputStream("/Users/myname/Desktop
/NetBeansProjects/PHQForum/phq.cer"));
ks.setCertificateEntry(“myalias”, chain[0]);
ks.setCertificateEntry("myalias", chain[1]);
ks.setCertificateEntry("myalias", chain[2]);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, passphrase);
SSLContext sslContext = SSLContext.getInstance("TLSv1.1");
sslContext.init(kmf.getKeyManagers(), null, null);
SSLServerSocketFactory ssf = sslContext.getServerSocketFactory();
SSLServerSocket serverSocket = (SSLServerSocket) ssf.createServerSocket(port);
while(true) {
try {
System.out.println("server is running");
SSLSocket us = (SSLSocket) serverSocket.accept();
Handler(us);
} catch (IOException e) {
System.err.println(e);
}
}
}
public void Handler(SSLSocket s) throws Exception, MessagingException {
Подробнее здесь: https://stackoverflow.com/questions/793 ... authentica
Мобильная версия