팝업gogogo

libs
0.00MB
스크린샷 2019-10-08 오전 8.41.45.png
0.13MB

파일다운

vnd:youtube:tkDO3cx7EoU

youtube tkDO3cx7EoU

브롤 구글스토어

market://브롤 구글스토어

sms://

smsto://

mms://

mmsto://

mailto://

tel://

nmap://

InstallCert.java.zip
0.00MB

Java 에서 ValidatorException 등 인증서 관련 에러 해결 - keystore에 SSL/TLS 인증서를 import 하는방법

 

 

회사에서 ssl 막히거나 인증서로인해 오류나는 경우가 있다. 해결해보자

 

[증상] 

java 에서 HTTPS 로 remote 사이트에 연결시 다음과 같은 Exception 이 발생 error log Caused by: javax.naming.CommunicationException: simple bind failed:  [Root exception is 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\]

 

 

[원인] 

다음과 같이 여러 가지 원인이 있을 수 있다. 연결하려는 remote site의 인증서가 신뢰하는 인증기관 인증서 목록(keystore)에 없음 서버/클라이언트간 사용하려는 SSL/TLS 버전이 맞지 않음(Ex:TLS 1.0 만 지원하는 서버에 1.2로 hand shaking 요청등) SSL/TLS 통신에 사용하려는 cipher suite 가 오래되거나 지원하지 않음. (Ex: JDK 1.8 부터는 RC4 를 사용하려고 하면 에러 발생) 웹 브라우저의 경우 인증서 경로 설정을 참고하여 웹 서버에 Intermediate CA certificate 를 설치한다.

 

무료 SSL 인증서를 발급해 주는 Let's encrypt 의 CA 인증서는 Java VM 에 포함되어 있지 않으므로 Let's encrypt 에서 발급 받은 SSL 인증서를 Java 에서 사용할 경우에도 위와 같은 에러가 발생한다.

 

 

[해결] 

1번 원인일 경우 현재 구동되는 JDK 의 keystore에 상대방 인증서를 넣어줘야 함

 

 

 

CMD 에서 처리

  1. gist 에서 InstallCert.Java 를 다운로드
    curl -O https://gist.githubusercontent.com/lesstif/cd26f57b7cfd2cd55241b20e05b5cd93/raw/InstallCert.java
     여기를 클릭하여 펼치기...
  2. 컴파일
    javac InstallCert.java
  3. InstallCert 구동
    # localhost 에 SSL 인증서를 받아올 호스트명을 입력
    java -cp ./ InstallCert  google.com
  4. 다음과 같은 화면이 나오면 1을 눌러서 인증서 저장Caused by: java.lang.UnsupportedOperationException
    at InstallCert$SavingTrustManager.getAcceptedIssuers(InstallCert.java:183)
    at sun.security.ssl.AbstractTrustManagerWrapper.checkAlgorithmConstraints(SSLContextImpl.java:926)
    at sun.security.ssl.AbstractTrustManagerWrapper.checkAdditionalTrust(SSLContextImpl.java:872)
    ...1 Subject CN=googl.com
    Issuer CN=Let's Encrypt Authority X3, O=Let's Encrypt, C=US
    sha1 47 0a 15 c4 5d ed 62 0a 4b 18 d5 d8 58 14 42 5d 36 e0 d5 8f 
    md5 3a 0d ab ce 27 be dd bd e5 c1 d5 e8 b6 25 aa ebEnter certificate to add to trusted keystore or 'q' to quit: [1]
    2
  5. 서버가 2 개의 인증서를 전송했는데 2번째가 Let's Encrypt 의 CA 인증서이므로 2번을 선택해서 저장해야 한다.
  6. 2 Subject CN=Let's Encrypt Authority X3, O=Let's Encrypt, C=US
    Issuer CN=DST Root CA X3, O=Digital Signature Trust Co.
    sha1 e6 a3 b4 5b 06 2d 50 9b 33 82 28 2d 19 6e fe 97 d5 95 6c cb 
    md5 b1 54 09 27 4f 54 ad 8f 02 3d 3b 85 a5 ec ec 5d
  7. Server sent 2 certificate(s):
  8. ssl import
  9. 다음과 같은 메시지가 나오고 저장됨. keystore 명과 alias 명을 기억
  10. Added certificate to keystore 'jssecacerts' using alias 'letsencrypt'
  11. keytool 로 keystore에서 인증서 추출 (KeyStore의 암호는 changeit 이라 가정!)


    ## alias 옵션뒤에 위의 alias명 입력
    keytool -exportcert -keystore jssecacerts -storepass changeit -file output.cert -alias letsencrypt

    keytool -exportcert -keystore "/경로/keystor.jks" -storepass "비번" -file output.cert -alias "keyAlias 명"

    -alias 옵션 뒤에 파라미터는 5번에서 저장된 alias(letsencrypt) 를 입력
  12. 현재 JDK 의 keystore에 cert import
    ## JAVA_HOME=/usr/java/jdk1.7.0_25
    keytool -importcert -keystore ${JAVA_HOME}/jre/lib/security/cacerts -storepass changeit -file output.cert -alias letsencrypt
    이미 존재할 경우 다음 명령어로 삭제
  13. keytool -delete -alias letsencrypt -keystore ${JAVA_HOME}/jre/lib/security/cacerts -storepass changeit

 

 

 

끝!

 

'IT' 카테고리의 다른 글

젠킨스 + bitbucket + fastlane  (0) 2022.02.23
windows WSL-Ubuntu에 Jenkins 설치  (0) 2022.02.23
안드 스튜디오에서 ndk 빌드하기  (0) 2019.06.18
vlc 2.5.5 compile  (0) 2017.11.14
phpmyadmin 로컬에서 외부 서버로 접속할때  (0) 2017.09.11

안드 스튜디오에서 ndk 빌드하기

참고 : https://developer.android.com/ndk/guides/ndk-build?hl=ko

1. 터미널에서 cd 로 프로젝트의 jni 폴더까지 이동 [ Application.mk 파일이 있는 폴더로 가야함 ]
2. ndk 폴더 path 가지고 와서 조합 해야함
3. [ndk-path]/ndk-build 때리면 빌드시작함
4. so 파일 생성완료!


Application.mk + ABI 수정

APP_ABI := armeabi-v7a arm64-v8a x86

https://developer.android.com/ndk/guides/abis.html?hl=ko

armeabi => r16에서 지원 중단되고, r17에서 삭제되었으며, 하드웨어 부동 소수점 없음
armeabi-v7a => ARMv5, v6 기기와 호환되지 않음
arm64-v8a
x86 => MOVBE 또는 SSE4를 지원하지 않음
x86_64

desc


https://github.com/videolan/vlc-android/releases

에서 버전 다운받아서 해도됨 버전별로 받아서 압축풀때 폴더이름은 vlc-android[버전] 이렇게 되는데 vlc-android 으로 변경 해주고 컴파일 해야함


https://developer.android.com/ndk/downloads/older_releases#ndk-15c-downloads

ndk 버전별로 받아두고 해야함 버전마다 빌드가 되는 버전이 따로 있음


https://wiki.videolan.org/AndroidCompile/



ubuntu 16.04 LTS 설치 (64bit)

setting -> detail -> software Update 해서 라이브러리들 최신 버전 유지



터미널키고

$ sudo apt-get update 


$ sudo apt-get install git libtool build-essential pkg-config autoconf



sudo apt-get install automake ant autopoint cmake build-essential libtool \
     patch pkg-config protobuf-compiler ragel subversion unzip git \
    openjdk-8-jre openjdk-8-jdk
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install zlib1g:i386 libstdc++6:i386 libc6:i386
sudo apt-get install ia32-libs




$ sudo apt-get install curl









git clone -b 2.5.5 https://code.videolan.org/videolan/vlc-android.git






SDK & Android Studio

  1. Go to Android SDK/IDE page.
  2. Android Studio is recommended, but not mandatory!
  3. Download the command-line tools
mkdir android-sdk
cd android-sdk; unzip tools_r25.2.3-linux.zip
./tools/bin/sdkmanager --update

Android NDK

  1. Check that the SDK installation is correct.
  2. Go to the Android NDK page and download the NDK r14b for Linux.
  3. Decompress it to install



export ANDROID_SDK=/path/to/android-sdk
export ANDROID_NDK=/path/to/android-ndk



./compile.sh

릴리즈

sh ./compile.sh -l -a x86 -r

sh ./compile.sh -l -a armeabi-v7a -r








에러나도 다시시도하면 넘어가는 경우가 많음...



밑의 protobuf 에러 날때 protoc 설치



make: *** [.protobuf] Error 2

contribs: make failed


----->>>>>>>>




1. apt로 설치... 

sudo apt-get install libprotobuf-dev protobuf-compiler




2. 직접 다운 설치

protoc-3.2.0 install


# Make sure you grab the latest version
curl -OL https://github.com/google/protobuf/releases/download/v3.2.0/protoc-3.2.0-linux-x86_64.zip

# Unzip
unzip protoc-3.2.0-linux-x86_64.zip -d protoc3

# Move protoc to /usr/local/bin/
sudo mv protoc3/bin/* /usr/local/bin/

# Move protoc3/include to /usr/local/include/
sudo mv protoc3/include/* /usr/local/include/

---요기 까지만 하면됨... 밑에껀 안해도 됨 s

# Optional: change owner
sudo chwon [user] /usr/local/bin/protoc
sudo chwon -R [user] /usr/local/include/google






vlc 엔진 수정 사항


========코덱정보 android 네이티브에 전달 ========

vlc-android/libvlc/jni/libvlcjni.c 수정


I 하나가 뒤에 더붙어야함. Integer를 뜻함

GET_ID(GetStaticMethodID,
fields.Media.createAudioTrackFromNativeID,
fields.Media.clazz,
"createAudioTrackFromNative",
"(Ljava/lang/String;Ljava/lang/String;IIIILjava/lang/String;Ljava/lang/String;III)"
"Lorg/videolan/libvlc/Media$Track;");

GET_ID(GetStaticMethodID,
fields.Media.createVideoTrackFromNativeID,
fields.Media.clazz,
"createVideoTrackFromNative",
"(Ljava/lang/String;Ljava/lang/String;IIIILjava/lang/String;Ljava/lang/String;IIIIIIIII)"
"Lorg/videolan/libvlc/Media$Track;");

vlc-android/libvlc/jni/libvlcjni-media.c 수정

media_track_to_object 함수 수정

맨뒤에 (jint)p_tracks->i_codec 전달자 추가. codec정보를 보내는것임

case libvlc_track_audio:
jobj = (*env)->CallStaticObjectMethod(env, fields.Media.clazz,
fields.Media.createAudioTrackFromNativeID,
jcodec,
joriginalCodec,
(jint)p_tracks->i_id,
(jint)p_tracks->i_profile,
(jint)p_tracks->i_level,
(jint)p_tracks->i_bitrate,
jlanguage,
jdescription,
(jint)p_tracks->audio->i_channels,
(jint)p_tracks->audio->i_rate,
(jint)p_tracks->i_codec);
break;
case libvlc_track_video:
jobj = (*env)->CallStaticObjectMethod(env, fields.Media.clazz,
fields.Media.createVideoTrackFromNativeID,
jcodec,
joriginalCodec,
(jint)p_tracks->i_id,
(jint)p_tracks->i_profile,
(jint)p_tracks->i_level,
(jint)p_tracks->i_bitrate,
jlanguage,
jdescription,
(jint)p_tracks->video->i_height,
(jint)p_tracks->video->i_width,
(jint)p_tracks->video->i_sar_num,
(jint)p_tracks->video->i_sar_den,
(jint)p_tracks->video->i_frame_rate_num,
(jint)p_tracks->video->i_frame_rate_den,
(jint)p_tracks->video->i_orientation,
(jint)p_tracks->video->i_projection,
(jint)p_tracks->i_codec);
break;

======== 메타데이터에서 String 한글깨져서 엔진단에서 죽어버리는 오류 수정법 ========

바이트 버퍼 그대로 전달을 받자


vlc-android/libvlc/jni/libvlcjni-media.c 에 함수 추가

jbyteArray
Java_org_videolan_libvlc_Media_nativeGetMetaByte(JNIEnv *env, jobject thiz, jint id)
{
vlcjni_object *p_obj = VLCJniObject_getInstance(env, thiz);
jbyteArray jmeta = NULL;

if (!p_obj)
return NULL;

if (id >= 0 && id < META_MAX) {
char *psz_media = libvlc_media_get_meta(p_obj->u.p_m, id);

if (psz_media) {
int len = strlen(psz_media);
//int n=0;
//while(*psz_media++){
// n++;
//}
//if(n<=0)return NULL;

jbyteArray jmetazz = (*env)->NewByteArray(env, len);
(*env)->SetByteArrayRegion (env, jmetazz, 0, len, (jbyte*)psz_media);
return jmetazz;
}
}
return jmeta;
}





android org.videolan.libvlc.Media.java 에

private native byte[] nativeGetMetaByte(int id);//추가


public String getMeta(int id){


...........

String nativeString = new String(nativeGetMetaByte(id), "UTF-8");



...........

}





===== FTP 언어셋 UTF-8로 강제 시키기 ===

vlc/modules/access/ftp.c 를 수정해야함 그러나 빌드시에 해당 파일이 새로운파일로 대체 되기 때문에

그에 맞추어 파일을 빌드 완료 되기전에 빠르게 수정해야함 [새로운 파일로 대체 안되는 방법이 있을것 같지만 찾지 못함..ㅠ]



static int Connect( vlc_object_t *p_access, access_sys_t *p_sys, const char *path ){


.......


///////// 추가 //////////


if( ftp_SendCommand( p_access, p_sys, "OPTS UTF8 ON" ) < 0 || ftp_RecvCommand( p_access, p_sys, NULL, NULL ) != 2 ) { msg_Err( p_access, "cannot set ftp UTF8 mode" ); goto error; }


///////// 추가끝 //////////


return 0;

}











https://retropie.org.uk/forum/topic/5202/step-by-step-how-to-build-emulationstation-on-windows




비주얼 c++설치 필수

https://www.microsoft.com/ko-kr/download/details.aspx?id=48145

서보 다른 서버에있는 mysql 과   phpmyadmin을 연동 하는법!!!!!!!!!!!!!!!!!!



phpmyadmin 을 설치한후 폴더에서 config.inc.php 파일을 찾아 연다.



config.inc.php 파일이없으면 생성한다!!

config.inc.php

파일첨부


/* Authentication type */

$cfg['Servers'][$i]['auth_type'] = 'cookie';

/* Server parameters */

$cfg['Servers'][$i]['host'] = '여기 AWS 의 RDS 엔드포인트를 적으면 됨';

$cfg['Servers'][$i]['user'] = 'DB 계정';

$cfg['Servers'][$i]['password'] = '비밀번호';

$cfg['Servers'][$i]['connect_type'] = 'tcp';

$cfg['Servers'][$i]['compress'] = false;

$cfg['Servers'][$i]['AllowNoPassword'] = false;


phpmyadmin 접속해서 서버아이디 비번 넣음 들어가짐!!!!



USB 시스템 바뀐 스카이레이크, 윈도우 7과의 문제

게임은 물론이고 영화, 프로그램, 운영체제등 각종 컨텐츠의 온라인 다운로드 방식이 대중화되면서, 기존에 이들 컨텐츠가 담겨 팔리던 CD/ DVD/ 블루레이 같은 광 미디어의 효용성이 낮아지고, 때문에 PC 본체에 ODD가 장착된 경우를 찾아보기 어렵게 되었다.

 


윈도우 설치전에 먼 드라이브를 설치하라고 자꾸뜬다..........................................




때문에 운영체제를 USB 드라이브에 담아 설치하는 것을 심심찮게 볼 수 있는데, 스카이레이크에서는 EHCI(Enhanced Host Controller Interface, USB 2.0)대신 xHCI(Extensible Host Controller Interface, USB 3.x)를 지원하기 때문에, xHCI를 네이티브 지원하지 않는 윈도우 7은 USB 드라이브를 통한 설치에 문제가 발생한다.

USB 3.x의 xHCI는 USB 2.0의 EHCI와 호환이 가능하기에 윈도우 7이 설치된 상황이라면 장비나 포트의 USB 버전에 상관없이 쓸 수 있지만, 역시 문제는 스카이레이크 구매후 산뜻한 마음으로 윈도우 7을 다시 설치하고자 할 때 xHCI를 기본 인식하지 못하니 USB 포트를 통한 설치가 어렵다는 것.

물론, USB가 아닌 메인보드 SATA 포트에 연결된 ODD(내장형 ODD)를 이용해 광미디어로 윈도우 7을 설치하는 경우는 문제가 없지만, 앞서 이야기했듯 요즘은 내장형 ODD가 없는 PC가 더 이상 낯설지 않은 환경이다.

 



http://www.gigabyte.kr/Support/Utility

http://download.gigabyte.asia/FileList/Utility/mb_utility_windowsimagetool_am4.zip

windows usb installation tool 다운 받자




실제 USB ODD를 이용해 윈도우 7을 설치하는 과정에서 USB 드라이버나 칩셋 드라이버를 지정해줘도 정상적으로 설치가 안되고, 관련 내용도 잘 알려져 있지 않아 소비자들은 왜 윈도우 7 설치가 안되는지 불만을 토로하게 되며, 관련 내용을 모르는 사용자들은 비난의 화살을 주로 메인보드 제조사로 돌리게된다.

때문인지 메인보드 제조사들은 USB를 이용해 윈도우 7을 설치할 수 있는 프로그램을 제공하는데, 이번 기사에서는 기가바이트의 '윈도우 USB 설치 도구'를 어떻게 쓰는지 알아보겠다.

 

클릭 몇 번으로 손쉽게 스카이레이크 PC용 USB 윈도우 7 설치본 구성


기가바이트 홈페이지에서 다운로드 받을 수 있는 '윈도우 USB 설치 도구'를 이용하면 USB 드라이브로 윈도우 7을 설치할 수 있는 미디어를 만들 수 있는데, 이미 윈도우 7 설치용 USB를 가지고 있다면 원본(Source Path)에서 'None - Add USB drivers'를, 대상(Destination Path) 설정은 설치용 윈도우 7 USB 드라이브를 지정해준 후, 하단 체크 박스에 표시를 해주고 '시작' 버튼을 누르면 스카이레이크 시스템을 위한 윈도우 7 설치용 USB 제작 과정은 자동으로 완료된다.

 


윈도우 7 설치용 USB 드라이브가 없을 경우, 기가바이트의 '윈도우 USB 설치 도구' 프로그램에서 확인할 수 있는 MS 윈도우 USB/ DVD 다운로드 툴을 받아 윈도우 7 iso 파일을 이용해 설치용 윈도우 7 USB 드라이브를 만들 수 있다.

참고로, MS에서 제공하는 USB/ DVD 다운로드 툴 사용을 위해 필요한 .net Framework 2.0은 MS 홈페이지서 다운로드 받을 수 있으며, 설치용 윈도우 7 USB 제작 과정에서 포맷이 이뤄지므로 중요 자료는 미리 백업을 받아두어야한다.

 


이렇게 완성된 윈도우 7 설치용 USB 드라이브를 인텔 100 시리즈 칩셋 메인보드의 USB 포트에 연결하면 문제없이 윈도우 7 설치를 진행할 수 있으므로, 아직 윈도우 10으로 업그레이드를 결정하지 못한 윈도우 7 사용자라면 각 메인보드 제조사에서 제공하는 윈도우 7 설치용 USB 제작 툴을 이용해보자.

'IT' 카테고리의 다른 글

vlc 2.5.5 compile  (0) 2017.11.14
phpmyadmin 로컬에서 외부 서버로 접속할때  (0) 2017.09.11
맥에서 vlc 컴파일 하기  (0) 2017.09.01
맥에서 안드로이드 폰과 파일 주고받기  (0) 2017.07.21
it 문제풀어보기?  (0) 2017.07.12

+ Recent posts