فرمت PEM یک نوع فرمت ذخیره‌سازی فایل برای نگه‌داشت کلیدها و certificateهای رمزنگاری است. نام کامل این فرمت Privacy-enhanced Electronic Mail و پراستفاده‌ترین فرمت ذخیره‌سازی در حوزه‌ی رمزنگاری به‌ویژه در سیستم‌های متن‌ باز است.

برخلاف بیش‌تر استانداردهای ذخیره‌سازی فایل‌های رمزنگاری که محتوا را به‌شکل binary ذخیره می‌کنند، فرمت PEM از base64 برای encoding استفاده می‌کند، این باعث می‌شود جابه‌جایی و خوانش فایل بسیار آسان‌تر شود.

اگرچه پسوند فایل‌های در سیستم‌های متن باز از اهمیت بالایی برخوردار نیست اما معمولا فایل‌های pem اگر کلید خصوصی یا private key را شامل باشند، از پسوند key. و اگر certificate را شامل باشد از پسوند cer. یا crt. یا pem. استفاده خواهند کرد.

فایل‌های با فرمت PEM را می‌توانید به‌راحتی به‌کمک یک ویرایش‌گر متن مانند notepad یا vim باز کنید و محتوای آن را بررسی کنید.

محتوای کلید خصوصی (Private key) شبیه به این خواهد بود:

-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCuaGs3MHEOUMvO
v7QLx1cAgx7BDMHE0eq70/A+JZlYjDL7IAcoubgibfRWyEPombDF/TtnOzuYXuNT
tkGVK+iOI3HbTgVANOrhIhTO91Vh3MDBftlNdzsYg4Ct/dZfvwGixgVfOza5nYcP
SFJ5r89fre1EV/3QA3m+oPYimejcTCwEcByxxP7unmoxR9wJMYCmF3IOtRKGMhCn
IbmIRwvaQ0yeCk9vh4WoZBbqJx4pVXmqz5D4IfDt2E41NiecWVoNHMTEF9xE2Few
3tPyfMMtqQH713DiVNmLBjHkJLK8a/ev2NjFMg8KTZ0hlVyaeBZDPz0iNk3iaeXf
pspZ42kPAgMBAAECggEANcqEzufE5spqoaCkskFQBxtpv9bkaITp5fZvEWvdSN8s
1iFBtADb1tqc0qs/rpzAVcBNswAk2FDjwizjO1PojPZHpoEAw5XOn5M4YcEM93rz
hHpQIUFV27CrXn58wNkTcxWqEH4d2c/JGSCQN3HO/s6Q8FRHNwHraa0RXQilNlRR
OKSyDZTMyTOB0zBxXR5eJ1izXISgJVhL+UTb1VUj+XdhmSVqP45p2dhJWTyGHy6O
taQDo7mUB+gTJzmLbFJxX2Hl50mh9R/Y3fLwGyg3uLBiibMq8ajFSPGgRTkdx+EY
PjRuDHLZ2qSCwqrUUuI2X1qAaOyLI+hdjlMlz048QQKBgQDk6kC33UmLGQSO+kqz
+j8Zh9lnEMU49Gfq0x4VZjnp9qzj9/8Cl+cOoAxcb1ZzQITvGf0ww85dhSPKh68x
QSfefJRm1z6JVyjCVOUYWCN3XTxp7tZMXvSe0ED+HWw96EA8P83QqsMLlH6YkZLq
as6K4R9iAtO14tIVoPeVAfZLYQKBgQDDCypU6A08aWyt9Bncfb6mUhheL7LFMRK9
fFxvWuSGLSeZ0hFjGGNJjIOcUUZvnXYTYmuYRrNnNtqY/UvB4ubWncbnU6HY/eZS
ejWp2GDiU9yGfvGObwoRv7X5341LKR4KJcdsC5QoDl43mceQ5xjXnsECh/Lssm5E
GLsWJ/z6bwKBgELtfliDeVIS0XNgGGFAhBxZzKVGkPMS+iL88Km/BqWx+mB4jHVc
pjBveM25u6PctEEX7x/Hz9kl6Q34167l5ts0v0rGGcGb2w3eNlEEy/HFL7mlG8Ce
bpTUPHxPa+s5sTYsTWd51abYFp9SyIqDCbovEbbdLrraAyRRuLE3LqRhAoGAQ7V5
kZYpGiLDDrRh0fB5IcX4HaJTXi9GAS/N6v5TvNyqFbUeQhdySFMWUUrJt++i0OHm
1isdFqStSFUOWpWJa1HEfgPDeM/TiChSvs6V+5v/P1WMR9T2WukBpGfd5gy1F/K7
gx+V5D3wqT6iUARZ1GiROm61f0QGEW/AatWg9dMCgYAAnR/QIVTUV+LuINT9lBUs
v7lqQzo8wUC2Itn6nD3zmKiJb/lvA/jSZAXMGc3oqBS+ocznKrABp39MONj6Bp7l
zvrNHuO8L5v7kK24snyyBfyizu03IbkHUOiIs5rXuD1N6fVG2XKQv9QsUm6NZp0o
1uGia9hksHK00QOXRhsGdA==
-----END PRIVATE KEY-----

 یک نمونه فایل PEM حاوی محتوای Certificate ساختاری شبیه به این خواهد داشت:

-----BEGIN CERTIFICATE-----
MIICLDCCAdKgAwIBAgIBADAKBggqhkjOPQQDAjB9MQswCQYDVQQGEwJCRTEPMA0G
A1UEChMGR251VExTMSUwIwYDVQQLExxHbnVUTFMgY2VydGlmaWNhdGUgYXV0aG9y
aXR5MQ8wDQYDVQQIEwZMZXV2ZW4xJTAjBgNVBAMTHEdudVRMUyBjZXJ0aWZpY2F0
ZSBhdXRob3JpdHkwHhcNMTEwNTIzMjAzODIxWhcNMTIxMjIyMDc0MTUxWjB9MQsw
CQYDVQQGEwJCRTEPMA0GA1UEChMGR251VExTMSUwIwYDVQQLExxHbnVUTFMgY2Vy
dGlmaWNhdGUgYXV0aG9yaXR5MQ8wDQYDVQQIEwZMZXV2ZW4xJTAjBgNVBAMTHEdu
dVRMUyBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkwWTATBgcqhkjOPQIBBggqhkjOPQMB
BwNCAARS2I0jiuNn14Y2sSALCX3IybqiIJUvxUpj+oNfzngvj/Niyv2394BWnW4X
uQ4RTEiywK87WRcWMGgJB5kX/t2no0MwQTAPBgNVHRMBAf8EBTADAQH/MA8GA1Ud
DwEB/wQFAwMHBgAwHQYDVR0OBBYEFPC0gf6YEr+1KLlkQAPLzB9mTigDMAoGCCqG
M49BAMCA0gAMEUCIDGuwD1KPyG+hRf88MeyMQcqOFZD0TbVleF+UsAGQ4enAiEA
l4wOuDwKQa+upc8GftXE2C//4mKANBC6It01gUaTIpo=
-----END CERTIFICATE-----

تبدیل از سایر فرمت‌ها به PEM

با توجه به این که Certificate خود را از کجا خریداری کرده‌اید یا چگونه آن رو تولید کرده‌اید فرمت پیش‌فرض آن متفاوت است. در بیش‌تر موارد certificate شما به‌شکل پیش‌فرض با فرمت PEM خواهد بود و نیازی به انجام تغییرات در آن نیست. اما اگر از فرمت‌هایی مانند PFX-PKCS#12 و یا P7B-PKCS#7 استفاده می‌کنید، می‌توانید به‌سادگی آن را به PEM تغییر دهید. برای این کار هم می‌توانید از ابزارهای آنلاین مانند اینجا استفاده کنید یا از دستورات OpenSSL استفاده کنید.

* دقت داشته باشید که فایل‌های PFX هم زمان دارای کلید خصوصی و Certificate هستند، پس می‌توان هم کلید خصوصی و هم certificate را از آن خارج کرد.

Convert DER to PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem
Convert P7B to PEM
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.pem
Convert PFX to PEM
openssl pkcs12 -in certname.pfx -nokeys -out certificate.pem openssl pkcs12 -in certname.pfx -nocerts -out private.key -nodes

ساختن Trust Chain

برای این‌که SSL/TLS Certificate به‌درستی عمل کند و محتوای وب‌سایت شما به‌کمک پروتکل HTTPS در تمامی مرورگرها بدون اخطار نمایش داده شوند، باید به‌جای بارگذاری فایل Certificate خود به شکل عادی یک SSL Certificate Trust Chain کامل ایجاد کنید. برای اطلاع از چگونگی انجام این کار راهنمای ساختن Certificate Trust Chain را مطالعه کنید.